2012-01-19 67 views
2

我使用PHP-FPM和MySQL運行nginx服務器。 PHP安裝了MySQL和MySQLi擴展,如phpinfo()所確認。我上傳了在localhost上完美工作的腳本,當我嘗試加載頁面時遇到了500錯誤。我的nginx日誌顯示:無法取得mysqli

2012/01/19 22:01:27 [error] 3393#0: *14 FastCGI sent in stderr: "PHP Warning: mysqli::prepare(): Couldn't fetch mysqli in /var/www/mydomain.com/chat/index.php on line 12

PHP Fatal error: Call to a member function execute() on a non-object in /var/www/mydomain.com/chat/index.php on line 13" while reading response header from upstream, client: 82.32.181.151, server: mydomain.com, request: "GET /chat/ HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "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'ing後,我發現了一些原因。一個是我過早地關閉了我的數據庫連接,不是這樣。另一個是我混合了OOP和MySQLi函數的調用,這也不是問題。另外,我的數據庫連接信息是正確的。

所以,我很難過。

回答

4

我假設你的13號線其實是這樣的:

$stmt->execute(); 

這意味着您準備調用失敗並返回一個布爾值FALSE到$stmt。由於布爾型的假不是一個對象,你不能調用它的方法,因此錯誤。

嘗試使代碼:

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

的問題是在您的線路13.你可能做這樣的事情

$stmt->execute(); 

但現在的變量,你問到含有方法execute ISN」一個物體。 的問題,可能是你的原因是:

  1. 你輸入$stmt錯了,所以它是一個未初始化的VAR
  2. 您所查詢的是錯的,那麼你有假的,而不是一份聲明中
  3. 您的數據庫 - 連接不起作用,所以你的$mysqli->prepare失敗。

找出哪一個是通過使用mysqli的錯誤函數...