【问题标题】:Couldn't fetch mysqli无法获取 mysqli
【发布时间】:2012-02-14 12:59:56
【问题描述】:

我正在使用 PHP-FPM 和 MySQL 运行 nginx 服务器。如phpinfo() 所确认,PHP 已安装 MySQL 和 MySQLi 扩展。我上传了在本地主机上完美运行的脚本,当我尝试加载页面时出现 500 错误。我的 nginx 日志显示:

2012/01/19 22:01:27 [错误] 3393#0: *14 FastCGI 在标准错误中发送:“PHP 警告:mysqli::prepare(): 无法在 /var/www/mydomain 中获取 mysqli .com/chat/index.php 第 12 行

PHP 致命错误:在从上游读取响应标头时,在第 13 行调用 /var/www/mydomain.com/chat/index.php 中的非对象上的成员函数 execute(),客户端:82.32。 181.151,服务器:mydomain.com,请求:“GET /chat/ HTTP/1.1”,上游:“fastcgi://127.0.0.1:9000”,主机:“mydomain.com”

我已将我的实际域替换为 mydomain.com。在 index.php 的第 12 行我有这个:

$stmt = $mysqli->prepare('SELECT r_id, name, room_pass, max_users FROM `rooms` ORDER BY name ASC');

在 Google 搜索后,我发现了几个原因。一是我过早地关闭了我的数据库连接,不是这样。另一个是我混合了 OOP 和功能性 MySQLi 调用,这也不是问题。另外,我的数据库连接信息是正确的。

所以,我被难住了。

【问题讨论】:

    标签: mysql nginx mysqli php


    【解决方案1】:

    我假设你的第 13 行实际上是这样的:

    $stmt->execute();
    

    这意味着您的准备调用失败并向$stmt 返回了一个布尔值 FALSE。由于布尔值 false 不是对象,因此您不能在其上调用方法,因此会出现错误。

    尝试制作代码:

    $stmt = $mysqli->prepare(...);
    if ($stmt === FALSE) {
        die($mysqli->error);
    }
    $stmt->execute();
    

    【讨论】:

      【解决方案2】:

      问题出在你的第 13 行。在那里你可能会做类似的事情

      $stmt->execute();
      

      但是现在您要求包含方法execute 的变量不是对象。 可能是您造成的问题是:

      1. 你打错了$stmt,所以它是一个未初始化的变量
      2. 您的查询错误,因此您得到的是 false 而不是准备好的语句
      3. 您的 db-connection 不起作用,因此您的 $mysqli->prepare 失败。

      通过mysqli的错误函数判断是哪一个...

      【讨论】:

        猜你喜欢
        • 2013-11-25
        • 2014-08-14
        • 1970-01-01
        • 1970-01-01
        • 2015-01-23
        相关资源
        最近更新 更多