2012-01-19 8 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が行った後、私はいくつかの原因を発見しました。 1つは、私がデータベース接続を途中でクローズしたということです。もう一つは、OOPと機能的なMySQLi呼び出しを混在させたことです。これも問題ではありません。また、私のデータベース接続情報も正しいです。

だから、私は困惑しています。私はあなたのライン13を想定してい

答えて

4

は実際にはこれです:

$stmt->execute(); 

ご用意コールに失敗し、$stmtにブール値FALSEを返したことを意味しています。ブールfalseはオブジェクトではないので、その上でメソッドを呼び出すことはできません。そのためエラーです。

コード作ってみましょう:あなたのライン13に

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

問題があるが、あなたはおそらく行う

$stmt->execute(); 

しかし、今の変数は、メソッドexecute ISN」を含むように頼むようなものオブジェクト。あなたの原因である可能性があります 問題点は以下のとおりです。

  1. それが初期化されていないVAR
  2. あなたのクエリが間違っているので、あなたが代わりに準備されたステートメント
  3. あなたのデシベルの偽持っているので、あなたは、間違った$stmtを入力しました-connectionが機能しないため、$mysqli->prepareは失敗します。

mysqliのエラー関数を使用して、どれか1つを特定します。

関連する問題