【问题标题】:MySQL stored procedure and PDO?MySQL存储过程和PDO?
【发布时间】:2013-09-10 14:05:47
【问题描述】:

我在 PHP 类中有一个函数,我试图在其中创建和运行存储过程,但我似乎无法将变量传递给存储过程。如果我手动输入dateStartdateEnduser_id,那么事情会按预期运行,但是当我尝试将变量绑定到它时(我什至尝试直接使用 PHP 变量无济于事):

 try {
      $sql = $conn->prepare("
           DROP PROCEDURE IF EXISTS datespopulate;
           DELIMITER |
           CREATE PROCEDURE datespopulate(dateStart DATE, dateEnd DATE, user_id)
           BEGIN
                WHILE dateStart <= dateEnd DO
                     INSERT INTO timesheet (DATE_YYYYMMDD, USER_ID) VALUES (dateStart, user_id);
                     SET dateStart = date_add(dateStart, INTERVAL 1 DAY);
                END WHILE;
           END;
           |
           DELIMITER ;
           CALL datespopulate(:startdate,:enddate,:user_id);
           ");
      $sql->execute(array(
           ':startdate'=> $startdate,
           ':enddate'=> $enddate,
           ':user_id'=> $userid));
 } catch(PDOException $e) {
      echo 'ERROR: ' . $e->getMessage(); }

我尝试了bindparam,但这似乎也不起作用(也许我做错了?)。我在这里做错了什么?

【问题讨论】:

    标签: php mysql stored-procedures pdo


    【解决方案1】:

    通过编辑我的原始代码解决了这个问题。我在两件事上失败了。一方面,我在创建过程时没有指定 user_id 是什么类型的变量(应该输入user_id INT)。其次,我必须分离所有变量以使用准备好的语句插入它们。数组对我不起作用,但如果我分别绑定每个变量,那么它就起作用了:

     $sql = $conn->prepare("CALL datespopulate(:startdate,:enddate,:userid);");
     $sql->bindParam(':startdate', $startdate, PDO::PARAM_STR);
     $sql->bindParam(':enddate', $enddate, PDO::PARAM_STR);
     $sql->bindParam(':userid', $userid, PDO::PARAM_INT);
     $sql->execute();
    

    【讨论】:

    • 真的,有人否决了这个答案?希望能解释一下为什么这值得一票否决。
    【解决方案2】:

    如果直接回答这个问题肯定是题外话,这里有一些提示给你如何调试它。

    1. 创建您的程序。
    2. 从控制台进行测试调用
    3. 创建一个测试脚本,其中不包含“整个项目的代码”中的任何部分,而只包含可重现的测试代码。
    4. 使用来自 PHP 的原始值进行测试调用
    5. 在同一个测试脚本中添加 PDO 并调用准备好的语句并启用错误报告。
    6. 在此处发布准确的代码和准确的输出。

    这样,您的问题至少可以让陌生人回答。

    【讨论】:

      猜你喜欢
      • 2013-08-22
      • 2012-09-12
      • 2017-08-24
      • 2012-12-17
      • 2012-01-23
      • 2014-09-07
      • 2012-09-26
      • 2021-04-08
      • 2018-05-21
      相关资源
      最近更新 更多