MySQLiでプリペアドステートメントを使用してデータを挿入する方法を学習しようとしています。
プリペアドステートメントは、同様のステートメントを効率的に繰り返し実行できることで賞賛されていますが、MySQLiを使用してループ内で複数のステートメントを実行する例を見つけることができないようです。私は特に次のことについて混乱しています:
- ループの前に呼び出すか
bind_param
、ループの内側に呼び出すか - の呼び出しの前または後に変数に値を割り当てるかどうか
bind_param
プリペアドステートメントに関するほとんどのチュートリアルでは、PDOを使用しています。PDOを使用すると、パラメーター値の配列をに渡すことができるexecute
ため、を呼び出す必要がなくなりますbindParam
。これはMySQLiには当てはまりません。
PHPの手動mysqli_prepare
エントリには、次の操作の順序を示す例があります。
- 変数に値を割り当てる
- プリペアドステートメント
- バインド変数
- 実行する
- 選ぶ
上記から判断すると、ループ内でbindステートメントを呼び出す必要があると思いました。
ただし、PHPの手動mysqli_stmt_execute
エントリには、次の操作の順序を示す例があります。
- プリペアドステートメント
- バインド変数
- 変数に値を割り当てる
- 実行する
- 変数に値を割り当てる
- 実行する
- 選ぶ
この例では示されていないことの1つは、変数が最初に宣言される場所であることに注意してください。bind_param
宣言されていない変数を渡すと通知が生成されると思いました。未定義の変数は参照によって渡されるため、それらを渡すことができることがようやくわかりました。
質問:
操作の1つの順序が他の順序よりも優先されますか?それとも、それはあなたがしていることに依存しているだけですか?どちらか一方に落とし穴はありますか?
注:コードはすでにMySQLiを使用しているため、PDOに切り替えたくありません(切り替えはこのプロジェクトの範囲外です)。