我正在使用带有MySQL(InnoDB)的PDO和存储过程,并且出于某种原因没有插入数据 - 有点像。
当我查看表中的属性时,每次运行它时Auto_increment都会上升,并且它会正常运行而没有错误。最后,我选择了我传入的变量,这一切都很好。
但是,即使表格“递增”,数据也不存在。如果我选择它所说的auto_increment ID是什么,我什么也得不到。如果我选择*并再次订购desc,它不会显示最新的。
任何可能导致此问题的想法?
谢谢!
这是存储过程:
DELIMITER $$
USE `DB`$$
DROP PROCEDURE IF EXISTS `addVal`$$
CREATE DEFINER=`data`@`%` PROCEDURE `addVal`(
v_val_accountid INT,
v_val_groupid INT,
v_val_validationtypeid INT,
v_val_validationstatusid INT,
v_val_key VARCHAR(255),
v_val_expirationdate DATETIME
)
MAIN:BEGIN
INSERT `Validation` (
Val_AccountId,
Val_GroupId,
Val_ValidationTypeId,
Val_ValidationStatusId,
Val_Key,
Val_ExpirationDate
) VALUES (
v_val_accountid,
v_val_groupid,
v_val_validationtypeid,
v_val_validationstatusid,
v_val_key,
v_val_expirationdate
);
END$$
DELIMITER;
以下是PDO准备的声明:
$key = '123456789';
$group_id = 0;
$type_id = 2;
$status_id = 1;
$date = 'DATE_ADD(NOW(), INTERVAL 1 DAY)';
$stmt = $this->db->prepare("CALL addVal(:account_id, :group_id, :type_id, :status_id, :key, :date)");
$stmt->bindParam(':account_id', $account_id, PDO::PARAM_INT);
$stmt->bindParam(':group_id', $group_id, PDO::PARAM_INT);
$stmt->bindParam(':type_id', $type_id, PDO::PARAM_INT);
$stmt->bindParam(':status_id', $status_id, PDO::PARAM_INT);
$stmt->bindParam(':key', $key, PDO::PARAM_STR);
$stmt->bindParam(':date', $date, PDO::PARAM_STR);
答案 0 :(得分:0)
我认为你在存储过程中遇到了某种错误,因为DATE_ADD(NOW(), INTERVAL 1 DAY)
是一个函数,而不是字符串,因此你不应该将它指定为PDO :: PARAM_STR。
您可以将该部分更改为:
// REPLACE PARAMETER FROM PARAM TO ACTUAL DATA_ADD FUNCTION
$stmt = $this->db->prepare("CALL addVal(:account_id, :group_id, :type_id, :status_id, :key, DATE_ADD(NOW(), INTERVAL 1 DAY))");
...
// COMMENT OUT BINDING
// $stmt->bindParam(':date', $date, PDO::PARAM_STR);
希望这有帮助!