【问题标题】:call mysql procedure using PDO got general error使用 PDO 调用 mysql 程序得到一般错误
【发布时间】:2017-05-17 03:38:58
【问题描述】:

您好,我对 PDO 有疑问,我有一个这样的 mysql 程序:

CREATE PROCEDURE `user_regis`(IN `name` VARCHAR(50), IN `hp` VARCHAR(12), IN `email` VARCHAR(30), IN `username` VARCHAR(20), IN `password  VARCHAR(20) )

    BEGIN

        IF (SELECT NOT EXISTS (SELECT * FROM USER WHERE USER_USERNAME = username AND USER_EMAIL = email)) THEN

            INSERT INTO USER
              (USER_ID, USER_NAME, USER_HP, USER_EMAIL, USER_USERNAME, USER_PASSWORD) 
            VALUES 
              (null,name,hp,email,username,password) ;

            INSERT INTO `VOUCHER`(`VOUCHER_CODE`, `USER_USERNAME`, `VOUCER_STATUS`, `VOUCHER_EXPIRY`) 
            VALUES((SELECT CONCAT('TRVL',ROUND(RAND()*1000000))),username,1,(SELECT NOW() + INTERVAL 48 HOUR) ) ;

            SELECT * FROM USER WHERE USER_USERNAME = username ;

        END IF;

    END

然后我使用 PDO 调用我的程序:

$regis = $this->pdo->query('call user_regis(a,a,a,a,a)');
if($regis->fetchColumn > 0){ echo "hai" ; }

但我遇到了一个错误:

致命错误:未捕获的 PDOException:SQLSTATE[HY000]:一般错误

有人能解释一下为什么吗? 谢谢你的帮助

【问题讨论】:

  • 如果不满足 IF 条件,则存储过程不会返回任何内容。有可能是这样吗?
  • mysql 能否返回零结果导致 pdo 错误? @DanFarrell
  • 很难说,因为您没有提供完整的示例。我不确定。
  • 我尝试使用 pdo->query(call user_regis(a,a,a,a,a) ) 将数据插入到我的过程中;这是第一次工作,但之后我遇到了一个错误,就像我在@DanFarrell 之前所说的那样

标签: php mysql stored-procedures pdo


【解决方案1】:

根据我们在 cmets 中的对话,我认为您应该将 SELECT 移到 END IF 行下方,以便无论是否满足 IF 条件都执行它。

您还必须为存储过程提供所需的任何参数。

【讨论】:

  • 但你只做了我告诉你的一半。
  • 你是对的,我的mysql程序中的IF条件有问题,所以我删除了它并在PHP中使用了IF条件,非常感谢你:)
猜你喜欢
  • 2015-08-16
  • 2017-06-17
  • 1970-01-01
  • 1970-01-01
  • 2019-10-13
  • 2013-06-20
  • 1970-01-01
  • 2017-04-29
相关资源
最近更新 更多