我正在使用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调用,这也不是问题。此外,我的数据库连接信息是正确的。
所以,我很难过。
答案 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
的变量不是对象。
可能是您的原因的问题是:
$stmt
错误,因此它是未初始化的var $mysqli->prepare
失败。使用mysqli的错误函数找出它是哪一个...