当我遇到类似的问题时,我遇到了这个问题。答案是正确的,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 函数允许的查询字符串。为此,您将需要类似PHP PDO中的“获取上次执行的查询”之类的东西。
此外,这并不能阻止您使用查询生成器生成语句,然后可以在 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');