0

PHP のドキュメントを正しく読んだら、mysqli_stmt_init を使用して、stmt 操作に適した変数を作成すると思いますか? 私はそれを正しくやっていると思っていましたが、正しく機能していないようです。ドキュメントにあるように実行すると、エラーが発生します。

警告: mysqli_stmt_bind_param() [function.mysqli-stmt-bind-param]: 無効なオブジェクトまたはリソース mysqli_stm"

$get_posts = mysqli_stmt_init($db);
mysqli_stmt_prepare($get_posts, 'select * from Chatposts where Chatid = ? and and CPid > ? and Deleted = ? order by CPid desc limit ?');
mysqli_stmt_bind_param($get_posts, 'iiii', $chatroomid, $lastpost, $deleted, $limit);
mysqli_stmt_execute($get_posts);
mysqli_stmt_bind_result($get_posts, $newposts);
mysqli_stmt_fetch($get_posts);
mysqli_stmt_close($get_posts);

ここで私が間違ったことをしたことがわかりますか?

4

1 に答える 1

2

次の二重のため、クエリは失敗していますand and

? and and CPid

したがってFALSE、mysqli_statement として返されます。 次に、そのエラーにつながる関数FALSEに挿入されます(有効なのみを受け入れるため)。1つ削除するだけで問題ありません。mysqli_stmt_bind_parammysqli_stmtand

mysqli_prepare から:

mysqli_prepare() はステートメント オブジェクトを返すか、エラーが発生した場合は FALSE を返します。

ただし、クエリ エラーなどを常にチェックすることをお勧めします。少なくとも、準備されたステートメントの値を次のように確認する必要があります。

mysqli_stmt_prepare($get_posts, 'select * from Chatposts where Chatid = ? and and CPid > ? and Deleted = ? order by CPid desc limit ?');
if (!empty(mysqli_error())) // exit or trigger error

PDOに移行することを強くお勧めします。特に何かが失敗した場合に、すべてをはるかに簡単にする優れた例外処理があります。

于 2013-03-14T00:52:46.783 に答える