开发者社区> 问答> 正文

如何在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以?它的工作。

展开
收起
保持可爱mmm 2020-05-17 17:32:57 475 0
1 条回答
写回答
取消 提交回答
  • 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

    2020-05-17 17:40:42
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
One Box: 解读事务与分析一体化数据库 HybridDB for MySQL 立即下载
One Box:解读事务与分析一体化数据库HybridDB for MySQL 立即下载
如何支撑HTAP场景-HybridDB for MySQL系统架构和技术演进 立即下载

相关镜像