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