Return ID registered in a procedure stored in mysql

0

Hello, I have the following code in php which makes the registration of a sale what I want is to perform the following action. Return the id of the record stored in the DB

$query = "CALL sp_insert_venta(:tipo_pago, :tipo_comprobante,
                :sumas, :iva, :exento, :retenido, :descuento, :total, :sonletras, :pago_efectivo, :pago_tarjeta, :numero_tarjeta,
                :tarjeta_habiente, :cambio, :estado, :idcliente, :idusuario, :nro_cuotas, :intereses_cuotas)";

                $stmt = $dbconec->prepare($query);
                $stmt->bindParam(":tipo_pago",$tipo_pago);
                $stmt->bindParam(":tipo_comprobante",$tipo_comprobante);
                $stmt->bindParam(":sumas",$sumas);
                $stmt->bindParam(":iva",$iva);
                $stmt->bindParam(":exento",$exento);
                $stmt->bindParam(":retenido",$retenido);
                $stmt->bindParam(":descuento",$descuento);
                $stmt->bindParam(":total",$total);
                $stmt->bindParam(":sonletras",$sonletras);
                $stmt->bindParam(":pago_efectivo",$pago_efectivo);
                $stmt->bindParam(":pago_tarjeta",$pago_tarjeta);
                $stmt->bindParam(":numero_tarjeta",$numero_tarjeta);
                $stmt->bindParam(":tarjeta_habiente",$tarjeta_habiente);
                $stmt->bindParam(":cambio",$cambio);
                $stmt->bindParam(":estado",$estado);
                $stmt->bindParam(":idcliente",$idcliente);
                $stmt->bindParam(":idusuario",$idusuario);
                $stmt->bindParam(":nro_cuotas",$numero_cuotas);
                $stmt->bindParam(":intereses_cuotas",$intereses_cuota);

                if($stmt->execute())
                {
                    $count = $stmt->rowCount();
                    if($count == 0){
                        $data = "Duplicado";
                        echo json_encode($data);
                    } else {
                        foreach($stmt->fetchAll(PDO::FETCH_ASSOC) as $row) {
                            echo json_encode(['message' => 'Validado', 'venta' => $row]);
                        }
                    }
                } else {

                    $data = "Error";
                    echo json_encode($data);
                }
                $dbconec = null;
            } catch (Exception $e) {
                $data = "Error";
                echo json_encode($e);
                //echo $e;

            }

My stored procedure: Note I was doing it this way but it returns an error

  

errorInfo: ["HY000"] 0: "HY000"

CREATE DEFINER='root'@'localhost' PROCEDURE 'sp_insert_venta'(IN 'p_tipo_pago' VARCHAR(75), IN 'p_tipo_comprobante' TINYINT(1), IN 'p_sumas' DECIMAL(10,2), IN 'p_iva' DECIMAL(10,2), IN 'p_exento' DECIMAL(10,2), IN 'p_retenido' DECIMAL(10,2), IN 'p_descuento' DECIMAL(10,2), IN 'p_total' DECIMAL(10,2), IN 'p_sonletras' VARCHAR(150), IN 'p_pago_efectivo' DECIMAL(10,2), IN 'p_pago_tarjeta' DECIMAL(10,2), IN 'p_numero_tarjeta' VARCHAR(16), IN 'p_tarjeta_habiente' VARCHAR(90), IN 'p_cambio' DECIMAL(10,2), IN 'p_estado' TINYINT(1), IN 'p_idcliente' INT(11), IN 'p_idusuario' INT(11), IN 'p_nro_cuotas' INT(11), IN 'p_intereses_cuotas' DECIMAL(10,2))
BEGIN

    DECLARE p_numero_comprobante INT;
    DECLARE p_efectivo_caja DECIMAL(10,2);
    DECLARE p_abono_credito DECIMAL(10,2);

    SET p_numero_comprobante = (SELECT usados + 1 FROM view_comprobantes WHERE idcomprobante = p_tipo_comprobante);



          IF NOT EXISTS (SELECT * FROM venta WHERE 'numero_comprobante' = p_numero_comprobante
          AND 'tipo_comprobante' = p_tipo_comprobante AND 'fecha_venta' = NOW()) THEN

              IF p_estado = '1' THEN

              IF p_idcliente = '0' THEN

                IF p_numero_comprobante = '0' THEN

                    INSERT INTO 'venta'('fecha_venta', 'tipo_pago',
                    'numero_comprobante', 'tipo_comprobante', 'sumas', 'iva',
                    'exento', 'retenido', 'descuento', 'total',
                    'sonletras', 'pago_efectivo', 'pago_tarjeta', 'numero_tarjeta',
                    'tarjeta_habiente', 'cambio', 'estado', 'idcliente', 'idusuario')
                    VALUES (NOW(), p_tipo_pago,
                    1, p_tipo_comprobante, p_sumas, p_iva,
                    p_exento, p_retenido, p_descuento, p_total,
                    p_sonletras, p_pago_efectivo, p_pago_tarjeta, p_numero_tarjeta,
                    p_tarjeta_habiente, p_cambio, p_estado, NULL, p_idusuario);

                    SELECT LAST_INSERT_ID() as registerID;
                    UPDATE 'tiraje_comprobante' SET
                    'disponibles' = 'disponibles' - 1
                    WHERE idcomprobante = p_tipo_comprobante;


                    IF (p_tipo_pago = 'EFECTIVO') THEN
                        CALL sp_insert_caja_venta(p_total);
                    ELSEIF (p_tipo_pago = 'EFECTIVO Y TARJETA') THEN
                        CALL sp_insert_caja_venta(p_pago_efectivo);
                    END IF;


                ELSE

                    INSERT INTO 'venta'('fecha_venta', 'tipo_pago',
                    'numero_comprobante', 'tipo_comprobante', 'sumas', 'iva',
                    'exento', 'retenido', 'descuento', 'total',
                    'sonletras', 'pago_efectivo', 'pago_tarjeta', 'numero_tarjeta',
                    'tarjeta_habiente', 'cambio', 'estado', 'idcliente', 'idusuario')
                    VALUES (NOW(), p_tipo_pago,
                    p_numero_comprobante, p_tipo_comprobante, p_sumas, p_iva,
                    p_exento, p_retenido, p_descuento, p_total,
                    p_sonletras, p_pago_efectivo, p_pago_tarjeta, p_numero_tarjeta,
                    p_tarjeta_habiente, p_cambio, p_estado, NULL, p_idusuario);


                    SELECT LAST_INSERT_ID() as registerID;
                    UPDATE 'tiraje_comprobante' SET
                    'disponibles' = 'disponibles' - 1
                    WHERE idcomprobante = p_tipo_comprobante;


                    /*IF (p_tipo_pago = 'EFECTIVO') THEN
                        CALL sp_insert_caja_venta(p_total);
                    ELSEIF (p_tipo_pago = 'EFECTIVO Y TARJETA') THEN
                        CALL sp_insert_caja_venta(p_pago_efectivo);
                    END IF;*/

                END IF;

               ELSE

                IF p_numero_comprobante = '0' THEN

                    INSERT INTO 'venta'('fecha_venta', 'tipo_pago',
                    'numero_comprobante', 'tipo_comprobante', 'sumas', 'iva',
                    'exento', 'retenido', 'descuento', 'total',
                    'sonletras', 'pago_efectivo', 'pago_tarjeta', 'numero_tarjeta',
                    'tarjeta_habiente', 'cambio', 'estado', 'idcliente', 'idusuario')
                    VALUES (NOW(), p_tipo_pago,
                    1, p_tipo_comprobante, p_sumas, p_iva,
                    p_exento, p_retenido, p_descuento, p_total,
                    p_sonletras, p_pago_efectivo, p_pago_tarjeta, p_numero_tarjeta,
                    p_tarjeta_habiente, p_cambio, p_estado, p_idcliente, p_idusuario);
                    SELECT LAST_INSERT_ID() as registerID;

                    UPDATE 'tiraje_comprobante' SET
                    'disponibles' = 'disponibles' - 1
                    WHERE idcomprobante = p_tipo_comprobante;


                    /*IF (p_tipo_pago = 'EFECTIVO') THEN
                        CALL sp_insert_caja_venta(p_total);
                    ELSEIF (p_tipo_pago = 'EFECTIVO Y TARJETA') THEN
                        CALL sp_insert_caja_venta(p_pago_efectivo);
                    END IF;*/


                ELSE

                    INSERT INTO 'venta'('fecha_venta', 'tipo_pago',
                    'numero_comprobante', 'tipo_comprobante', 'sumas', 'iva',
                    'exento', 'retenido', 'descuento', 'total',
                    'sonletras', 'pago_efectivo', 'pago_tarjeta', 'numero_tarjeta',
                    'tarjeta_habiente', 'cambio', 'estado', 'idcliente', 'idusuario')
                    VALUES (NOW(), p_tipo_pago,
                    p_numero_comprobante, p_tipo_comprobante, p_sumas, p_iva,
                    p_exento, p_retenido, p_descuento, p_total,
                    p_sonletras, p_pago_efectivo, p_pago_tarjeta, p_numero_tarjeta,
                    p_tarjeta_habiente, p_cambio, p_estado, p_idcliente, p_idusuario);

                    UPDATE 'tiraje_comprobante' SET
                    'disponibles' = 'disponibles' - 1
                    WHERE idcomprobante = p_tipo_comprobante;


                    IF (p_tipo_pago = 'EFECTIVO') THEN
                        CALL sp_insert_caja_venta(p_total);
                    ELSEIF (p_tipo_pago = 'EFECTIVO Y TARJETA') THEN
                        CALL sp_insert_caja_venta(p_pago_efectivo);
                    END IF;


                END IF;


              END IF;


            ELSEIF p_estado = '2' THEN

            IF p_numero_comprobante = '0' THEN

                INSERT INTO 'venta'('fecha_venta', 'tipo_pago',
                'numero_comprobante', 'tipo_comprobante', 'sumas', 'iva',
                'exento', 'retenido', 'descuento', 'total',
                'sonletras', 'pago_efectivo', 'pago_tarjeta', 'numero_tarjeta',
                'tarjeta_habiente', 'cambio', 'estado', 'idcliente', 'idusuario')
                VALUES (NOW(), p_tipo_pago,
                1, p_tipo_comprobante, p_sumas, p_iva,
                p_exento, p_retenido, p_descuento, p_total,
                p_sonletras, 0.00, 0.00, NULL, 0.00, 0.00, p_estado, p_idcliente, p_idusuario);

                UPDATE 'tiraje_comprobante' SET
                'disponibles' = 'disponibles' - 1
                WHERE idcomprobante = p_tipo_comprobante;

                CALL sp_insert_credito_venta(p_total, p_idcliente, p_nro_cuotas, p_intereses_cuotas);

                ELSE

                INSERT INTO 'venta'('fecha_venta', 'tipo_pago',
                'numero_comprobante', 'tipo_comprobante', 'sumas', 'iva',
                'exento', 'retenido', 'descuento', 'total',
                'sonletras', 'pago_efectivo', 'pago_tarjeta', 'numero_tarjeta',
                'tarjeta_habiente', 'cambio', 'estado', 'idcliente', 'idusuario')
                VALUES (NOW(), p_tipo_pago,
                p_numero_comprobante, p_tipo_comprobante, p_sumas, p_iva,
                p_exento, p_retenido, p_descuento, p_total,
                p_sonletras, 0.00, 0.00, NULL, 0.00, 0.00, p_estado, p_idcliente, p_idusuario);

                UPDATE 'tiraje_comprobante' SET
                'disponibles' = 'disponibles' - 1
                WHERE idcomprobante = p_tipo_comprobante;

                CALL sp_insert_credito_venta(p_total, p_idcliente, p_nro_cuotas, p_intereses_cuotas);

            END IF;

            END IF;

        END IF;
END
    
asked by vdjkelly 30.11.2018 в 22:19
source

1 answer

0

In the Procedure you can place the following

SET nuevoId = LAST_INSERT_ID();
SELECT nuevoId;

If you need to return it with more fields, simply add it

SELECT CAMPOA, CAMPOB, nuevoId FROM Tabla

and already in php you only take it with the fetchAll

    
answered by 30.11.2018 / 22:39
source