私には少し(そしてばかげた)問題があります:mysqliとMySQLサーバーを使用してPHPアプリケーションを構築しています。アプリケーションがロードされると、$databaseという変数が次を使用して初期化されます。
$database = new mysqli($dbHost, $dbUser, $dbPassword, $dbName);
もちろん、これは完全に機能します。クエリを実行するステートメントを作成する場合:
$stmt = $database->prepare('SELECT a, b, c FROM table WHERE a = ?');
これはまだ機能します。しかし、前のステートメントを閉じずに別のステートメントを作成しようとすると、うまくいくこともあれば、今はうまくいくこともあります。ステートメントの作成が失敗したときに発生するエラーは次のとおりです。
Fatal error: Call to a member function bind_param() on a non-object
そして私の質問は:なぜですか?新しいステートメントを作成するたびに(そして別のステートメントを開くたびに)接続(new mysql(...))を開くにはどうすればよいですか?
例
$stmt = $database->prepare('SELECT a, b, c FROM table WHERE a = ?');
$stmt->bind_param('i', $aValue);
$stmt->execute();
/* do some other operations, without closing $stmt */
$stmt2 = $database->prepare('INSERT INTO table2 (e, f) VALUES (? ,?)');
// Now, $stmt2 isn't initialized, so when the next line is run, the app fails
$stmt2->bind_param('ss', $someValue, $anotherValue);
もし、前に
$stmt2 = $database->prepare('INSERT INTO table2 (e, f) VALUES (? ,?)');
シンプルなものを追加します
$stmt->close();
すべて問題なく動作します。それで、問題は何ですか?