0

したがって、私はMysqliでPHPを使用しており、非常に基本的なプリペアドステートメントを実行しようとしています。

$stmt = $mysqli->prepare("SELECT field FROM blubb WHERE id=? AND username=? LIMIT 1");

while($doingStuff){
  // Do Stuff
  $stmt->bind_param("is", $id, $username);
  $stmt->execute();
  // Do Stuff
}

しかし、実行を実行しようとすると、内部サーバーエラーが発生します。

すでに設定しました

error_reporting(E_ALL);
ini_set("display_errors", 1);

私のスクリプトでは、何が問題なのかを知るためにエラーメッセージが表示される可能性があると考えていますが、それでも内部サーバーエラーです。

私も試しました

$stmt->execute() or die("error msg");

しかし、それでも同じエラーであり、サーバーエラーログにも何もありません。私も試したのは、$ idをintに明示的にキャストすることでしたが、役に立ちませんでした。

これをデバッグしてエラーを見つけるにはどうすればよいですか?スクリプトから適切なエラーメッセージを取得できないようです。また、使用している他の準備されたStatemenが正常に実行されているため、何が間違っているのかわかりません。

編集:わかりました、問題の原因を見つけました。これを実行しようとしていました

while($doStuff){
  method($stmt1, $stmt2)
}
method($stmt1, $stmt2){
  // handle $stmt1
  // stuff
  // handle $stmt2
}

この記事によると、これは不可能です http://www.ioncannon.net/programming/889/php-mysqli-and-multiple-prepared-statements/

変更するだけでエラーを修正しました

while($doingStuff){
  // Do Stuff
  $stmt->bind_param("is", $id, $username);
  $stmt->execute();
  // Do Stuff
}

while($doingStuff){
  // Do Stuff
  $stmt->bind_param("is", $id, $username);
  $stmt->execute();
  $stmt->store_result();
  // Do Stuff
}

最初のステートメントで。

ただし、共有ホスティングを使用しているため、php.iniを変更できないため、内部サーバーエラーではなく実際のエラーを取得する方法を知りたいです。

4

1 に答える 1

1

スクリプトからではなく、PHP 構成でdisplay_errorslog_errors、およびerror_logディレクティブを設定してみてください。

于 2012-11-16T13:59:28.313 に答える