嗨,我需要在我的网站中使用“准备好的声明”。我尝试使用这个
$sql = "SELECT * FROM tbl_user WHERE uid=:id and activation_key=:key"; $query = $this->db->query( $sql, array( ':id' => $uid ,':key' => $activation_key) ); 但这不起作用。当我改变:id并:key以?它的工作。
CodeIgniter不支持预备语句。如果查看CI的Database类的源代码,您将看到它们仅通过用传递的数组中的数据替换问号来解析绑定:
https://github.com/EllisLab/CodeIgniter/blob/develop/system/database/DB_driver.php#L874 它们仅支持使用未命名占位符的查询绑定。参见http://ellislab.com/codeigniter/user-guide/database/queries.html
查询绑定
通过使系统为您组合查询,绑定使您能够简化查询语法。考虑以下示例:
$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?"; $this->db->query($sql, array(3, 'live', 'Rick')); 查询中的问号会自动替换为查询函数第二个参数中数组中的值。
和http://ellislab.com/forums/viewthread/105112/#528915
即使CI不支持预备语句,它也支持查询绑定。对于预处理语句,您必须调用某种类型的prepare()函数,然后调用某种类型的execute()函数。使用查询绑定,您只需要调用一个函数,基本上就可以完成相同的事情。因此,与准备好的语句相比,我更喜欢查询绑定。
在阿里纳斯,改变?以:foo仅仅从无名到名为绑定(CI显然不支持任何)改变。仅仅因为您使用其中之一或不代表您正在准备语句。来源:stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。