1. ホーム
  2. php

[解決済み] 非オブジェクトのメンバ関数bind_param()の呼び出し【重複

2022-02-12 13:31:59

質問

このプリペアド・ステートメントで変数をバインドしようとしているのですが、エラーが出続けています。

Call to a member function bind_param() on a non-object

関数が呼び出され、変数が渡されます。この関数を変更して、変数を単にechoするようにすると、変数はうまくページに印刷されますが、ここでそれをバインドしようとすると、エラーが発生します。

//CALL FROM PAGE ONE
check($username);

//FUNCTION ON PAGE 2
function check($username){
$DBH = getDBH();
$qSelect = $DBH->prepare("SELECT * FROM users WHERE username = ?");
$qSelect->bind_param("s", $username);
}

関数が完全にここに書かれていないことは知っていますが、それは問題ではないはずです。なぜこのようなエラーが発生するのか理解できません。

解決方法を教えてください。

というエラーメッセージが表示されます。 $qSelect はオブジェクトではないようです。 var_dump($qSelect); を呼び出した直後であることを確認します。 getDBH() は必要なものを返します。

は、prepareコールに失敗して(なぜかはわからない)、その結果 false - false はオブジェクトではありません。 bind_param() を追加しました。

EDITです。 情報がありませんが、PHPのPDOを使っているようですね。その場合、以下を参照してください。 ドキュメント .

データベースサーバーが成功した場合 はステートメントを準備し、PDO::prepare() は はPDOStatementオブジェクトを返します。もし データベースサーバーが は、ステートメントを準備します。 はFALSEを返すか、PDOExceptionを発生させます。 (エラー処理に依存する)。

PDO-Exceptionsを返すようにサーバーを設定すれば、prepareの呼び出しが失敗した理由がわかるはずです。