Hello, I have the following code in php which performs the registration of a sale, what I want is to perform the following action. Return the id of the record saved 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
In the Procedure you can place the following
if you need to return it with more fields just add it
and already in php you only take it with the
fetchAll