同様の問題に直面したときに、この質問に出くわしました。CIはプリペアドステートメントをサポートしていないという答えは正しいです。ただし、プリペアドステートメントを使用できないという意味ではありません。
次の例では、接続クラスとしてPDOを使用していますが、次のコードは機能します。
$q = $this->db->conn_id->prepare('SELECT * FROM tbl_user WHERE uid=? and activation_key=?');
$q->execute(array($param1,$param2));
print_r($q->fetchAll());
conn_idは、プリペアドステートメントを実行できるPDOオブジェクトであることに注意してください。
ただし、これで許可されないのは、ネイティブCI関数で許可されているクエリ文字列を取得することです。そのためには、 PHPPDOでGetLastExecutedQueryのようなものが必要になります。
さらに、これは、クエリビルダーを使用してステートメントを作成することを妨げるものではありません。ステートメントは、PDOの準備で使用できます。例えば -
$db->where('uid = ?',null,false);
$db->where('activation_key = ?',null,false);
$q = $this->db->conn_id->prepare($db->get_compiled_select('tbl_user'));
クエリを作成し、出力すると基本的なクエリを表示できるようになります$db->get_compiled_select('tbl_user');