【问题标题】:PHP: mysqli_fetch_assoc doesn't work with stored proceduresPHP:mysqli_fetch_assoc 不适用于存储过程
【发布时间】:2011-01-23 11:24:30
【问题描述】:

我在 MySQL 数据库中有一个“帐户”(ID、电子邮件、密码)。

我有存储过程

DELIMITER $$
CREATE PROCEDURE `LoadAccount`(email_p VARCHAR(100))
BEGIN
    SELECT pass FROM account WHERE email = email_p;
END$$
DELIMITER ;

这是代码

function loadAccount($email, $pass)
{
  // connect to DB
  // ...
  $query = "CALL LoadAccount('{$email}')";

  if ($mysqli->multi_query($query))
  {
    do
    {
      if ($result = $mysqli->store_result())
      {
        // Numbered array.
        while ($row = $result->fetch_array(MYSQLI_NUM))
        {
          printf("%s %s\n", $row[0]);
        }

        // Associative array.
//        while ($row = $result->fetch_array(MYSQLI_ASSOC))
//        {
//          printf("%s\n", $row['pass']);
//        }
        $result->free();
      }
      $mysqli->more_results();
    } while ($mysqli->next_result());
  }
}

所以,编号数组部分有效,但如果我将其注释掉并取消注释关联数组部分 - 页面就会挂起并失去连接。

为什么它不起作用?

【问题讨论】:

  • 您感到困惑是对的,因为这是应该工作的代码。您能否查看 mysql 服务器日志以及慢查询日志(如果已启用)并查看显示的内容
  • 服务器日志显示错误:错误应用程序名称:httpd.exe,版本:2.2.14.0,时间戳:0x4ad08a08 错误模块名称:php_mysqli.dll,版本:5.2.5.5,时间戳:0x47389d89 异常代码:0xc0000005 错误偏移量:0x0000000000002474 错误进程 id:0x1014 错误应用程序启动时间:0x01cabb38919dc683 错误应用程序路径:C:\apache64\bin\httpd.exe 错误模块路径:C:\php\ext\php_mysqli.dll 报告 ID:64124eed -2731-11df-9c2d-002564f16a19 如何启用查询日志?

标签: php mysql stored-procedures mysqli


【解决方案1】:

不确定您的代码中是否有错字,但是:

printf("%s\n", $row[pass]);

应该是:

printf("%s\n", $row['pass']);

【讨论】:

  • 不,不是这样。即使我在循环内什么都不做,它也会挂起。不过,您对缺少引号是正确的。
【解决方案2】:

好吧,对于奇怪的事情,重新安装 PHP 会有所帮助!至少这次是这样。

【讨论】:

    猜你喜欢
    • 2015-11-11
    • 1970-01-01
    • 2021-09-04
    • 2011-09-16
    • 1970-01-01
    • 2018-05-21
    • 1970-01-01
    • 2011-09-21
    • 2010-12-02
    相关资源
    最近更新 更多