【问题标题】:Cant get stored procedure resultset via PDO PHP无法通过 PDO PHP 获取存储过程结果集
【发布时间】:2012-08-04 05:06:26
【问题描述】:

我似乎无法使用 PDO (PHP) 从我的存储过程 (MYSQL) 中获得任何输出。

存储过程:

CREATE PROCEDURE getUserId(serviceId VARCHAR(64), serviceInput VARCHAR(32))
BEGIN
    SELECT id FROM users WHERE servid = serviceId AND service = serviceInput;
END

PHP 代码:

$mysqlConn = mysqlPDOLogin();
$stmt = $mysqlConn->prepare("CALL getUserId(?,?);");
$stmt->bindParam(1, $USERID); 
$stmt->bindParam(2, $USERPROVIDER); 
$stmt->execute();
$returned_a = $stmt->fetch();
echo $returned_a['id'];

它没有得到任何回报。我已经从存储过程中复制了基本的选择代码并直接在 PHP 代码中使用它并且它可以工作,但无法通过存储过程使其工作。

任何帮助将不胜感激......

【问题讨论】:

    标签: php mysql pdo resultset procedure


    【解决方案1】:

    您没有进行任何明显的错误检查。 Prepare()、bindParam() 和 execute() 都会通过返回 false 或抛出异常来提醒您错误,具体取决于 PDO 所处的错误报告模式。

    我将假设您处于“return false”模式。

    您需要检查 $stmt 是 PDOStatement 对象,bindParam 语句没有返回 false 并且 execute 没有返回 false。如果其中任何一个发生了,那么您需要使用 errorCode() 和 errorInfo() 来找出问题所在。

    此外,对我来说,使用存储过程来处理基本上是一个简单的查询似乎有些过分。为什么不直接执行以下操作?

    $stmt = mysqlConn->prepare ('SELECT id FROM users WHERE servid = ? AND service = ?');
    

    【讨论】:

    • 感谢您的帮助。没有显示错误。我使用 echo($stmt->errorCode()) 来检查错误,什么也没有。我以前确实有过类似的事情,但是使用的是 mysqli 而不是 pdo,它抱怨我绑定的结果数量(可能是因为它没有得到结果集。)但我最终没有费心去研究它,现在换了一个项目即时通讯使用 PDO 并且我遇到了同样的问题,无法从存储过程中得到任何东西...... PS:出于安全原因,我不想发布一个巨大的存储过程,它使回答问题变得复杂。
    猜你喜欢
    • 2018-06-05
    • 2012-12-22
    • 1970-01-01
    • 2018-07-13
    • 1970-01-01
    • 1970-01-01
    • 2010-11-13
    • 2011-07-24
    • 1970-01-01
    相关资源
    最近更新 更多