Php 链接MySQL命令与原始查询
过去,我一直在使用自己的cms/框架构建很多网站,并且我开发了一种执行查询的简单方法。最近我开始使用其他框架,比如CodeIgniter。他们提供原始查询输入,例如Php 链接MySQL命令与原始查询,php,mysql,codeigniter,Php,Mysql,Codeigniter,过去,我一直在使用自己的cms/框架构建很多网站,并且我开发了一种执行查询的简单方法。最近我开始使用其他框架,比如CodeIgniter。他们提供原始查询输入,例如 $this->db->query(“SELECT * FROM news WHERE newsId=1;”); 但它们也通过PHP方法提供MySQL命令的链接 $this->db->select("*")->from("news")->where("newsId=?"); 问题是,;每种选择的
$this->db->query(“SELECT * FROM news WHERE newsId=1;”);
但它们也通过PHP方法提供MySQL命令的链接
$this->db->select("*")->from("news")->where("newsId=?");
问题是,;每种选择的主要区别和好处是什么
我知道后一个选项会阻止MySQL注入,但老实说,使用$this->db->escape()
也可以做到这一点
因此,从最后我所看到的情况来看,后一个选项只会让你在键盘上使用更多的字母,你可能会认为这会让你的速度变慢。我不能为CodeIgniter说话(坦白地说,我所看到的是,它似乎是挂在一起的),但使用这种系统有几个原因:
- 作为支持不同DBMS后端的抽象层的一部分,例如,
将自动为MySQL和PostgreSQL等生成正确的->offset(10)->limit(10)
、offset
变量以及类似的子句limit
- 作为“ORM”系统的一部分,查询结果将根据查询的表和列自动映射到相应类的模型对象中
- 为了向后兼容性或安装要求(例如,在特定安装中,表“news”实际上可能被称为“app1_news”,以避免与其他应用程序发生冲突),从表和列的确切名称中抽象出来
- 处理参数化查询,如示例中所示;尽管与这种抽象基本无关,但它们提供的不仅仅是转义,因为DBMS(MySQL或任何正在使用的)知道查询的哪些部分是固定的,哪些是可变的,这对性能和安全性都很有用
它真正的查询编写是开发人员的最佳习惯。但是有些问题使它变得困难
1。在编写插入和更新大型查询时,有时很难匹配每一行的值。。但这会让事情变得容易。您只需先添加数组,然后即可轻松执行。
2.不管您使用什么数据库。
3.有时,如果查询有很多条件,那么它确实很难读取或写入。但在AR中,您可以为一个查询级联多个对象。
4.AR节省您重复语句的时间我认为在codeigniter中实现activerecord适用于小而简单的查询。 当您需要包含大量连接的复杂查询时,更清楚的是只编写查询本身
我认为,如果您具有一定的SQL技能,那么额外的抽象层永远不会给您带来更好的性能 DAO并不一定更快。相反,有很多代码将DAL接口转换为实际的SQL查询,这肯定比自己编写查询要慢。此外,手工编制的查询通常比DAL根据模板和常见案例自行拼凑的查询更有效。