CodeIgniterはプリペアドステートメントをサポートしていません。 CIのデータベースクラスのソースコードを見ると、質問マークを渡された配列のデータに置き換えるだけでバインディングが解決されることがわかります。
名前のないプレースホルダーを使用したクエリバインディングのみをサポートします。 http://ellislab.com/codeigniter/user-guide/database/を参照してくださいquerys.html
クエリバインディング
バインディングを使用すると、システムにクエリをまとめてもらうことで、クエリ構文を簡素化できます。次の例を考えてみましょう:
$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?"; $this->db->query($sql, array(3, 'live', 'Rick'));
クエリの質問マークは、クエリ関数の2番目のパラメータの配列の値に自動的に置き換えられます。
および
CIはプリペアドステートメントをサポートしていませんが、クエリバインディングをサポートしています。プリペアドステートメントでは、ある種のprepare()関数を呼び出してから、ある種のexecute()関数を呼び出す必要があります。クエリバインディングを使用すると、1つの関数を呼び出すだけで、基本的に同じことを実行できます。このため、プリペアドステートメントよりもクエリバインディングの方が好きです。
ちなみに、?
を変更します :foo
へ 名前のないバインディングから名前の付いたバインディングに変更しているだけです(CIは明らかにどちらもサポートしていません)。どちらかを使用している、またはステートメントを準備しているという意味ではありません。