无法获取mysqli

时间:2012-01-19 21:10:26

标签: mysql nginx mysqli php

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

  

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

     

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');

谷歌之后,我发现了几个原因。一个是我提前关闭了我的数据库连接,这不是它。另一个是我混合了OOP和功能MySQLi调用,这也不是问题。此外,我的数据库连接信息是正确的。

所以,我很难过。

2 个答案:

答案 0 :(得分:6)

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

$stmt->execute();

表示您的prepare调用失败,并向$stmt返回一个布尔值为FALSE。由于布尔值false不是对象,因此您无法在其上调用方法,因此会出错。

尝试制作代码:

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

答案 1 :(得分:5)

问题在于您的第13行。您可能会执行类似

的操作
$stmt->execute();

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

  1. 您键入了$stmt错误,因此它是未初始化的var
  2. 您的查询错误,所以您有错误而不是准备好的陈述
  3. 您的数据库连接不起作用,因此$mysqli->prepare失败。
  4. 使用mysqli的错误函数找出它是哪一个...