MySQL不使用PDO和存储过程插入

时间:2011-12-18 20:31:51

标签: mysql stored-procedures pdo innodb

我正在使用带有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);

1 个答案:

答案 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);

希望这有帮助!