无法获取mysqli

Jam*_*son 2 php mysql mysqli nginx

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

2012/01/19 22时01分27秒[错误] 3393#0:*14的FastCGI在标准错误发送:"PHP警告:mysqli的::制备():无法在/var/www/mydomain.com/取的mysqli第12行的chat/index.php

PHP致命错误:调用一个成员函数执行()一个非对象在/var/www/mydomain.com/chat/index.php上线13" ,而从上游,客户机读取响应标头: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');
Run Code Online (Sandbox Code Playgroud)

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

所以,我很难过.

Mar*_*c B 6

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

$stmt->execute();
Run Code Online (Sandbox Code Playgroud)

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

尝试制作代码:

$stmt = $mysqli->prepare(...);
if ($stmt === FALSE) {
    die($mysqli->error);
}
$stmt->execute();
Run Code Online (Sandbox Code Playgroud)


Nan*_*nne 5

问题出现在你的第13行.你可能会做类似的事情

$stmt->execute();
Run Code Online (Sandbox Code Playgroud)

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

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

通过使用mysqli的错误函数找出它是哪一个...