一尘不染

如何在CodeIgniter中使用预准备语句

mysql

嗨,我需要在我的网站中使用“准备好的声明”。我尝试使用这个

$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?它的工作。


阅读 234

收藏
2020-05-17

共1个答案

一尘不染

CodeIgniter不支持预备语句。如果查看CI的Database类的源代码,您将看到它们仅通过用传递的数组中的数据替换问号来解析绑定:

它们仅支持使用未命名占位符的查询绑定。参见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显然不支持任何)改变。仅仅因为您使用其中之一或不代表您正在准备语句。

2020-05-17