Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 链接MySQL命令与原始查询_Php_Mysql_Codeigniter - Fatal编程技术网

Php 链接MySQL命令与原始查询

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=?"); 问题是,;每种选择的

过去,我一直在使用自己的cms/框架构建很多网站,并且我开发了一种执行查询的简单方法。最近我开始使用其他框架,比如CodeIgniter。他们提供原始查询输入,例如

$this->db->query(“SELECT * FROM news WHERE newsId=1;”);
但它们也通过PHP方法提供MySQL命令的链接

$this->db->select("*")->from("news")->where("newsId=?");
问题是,;每种选择的主要区别和好处是什么

我知道后一个选项会阻止MySQL注入,但老实说,使用
$this->db->escape()
也可以做到这一点


因此,从最后我所看到的情况来看,后一个选项只会让你在键盘上使用更多的字母,你可能会认为这会让你的速度变慢。

我不能为CodeIgniter说话(坦白地说,我所看到的是,它似乎是挂在一起的),但使用这种系统有几个原因:

  • 作为支持不同DBMS后端的抽象层的一部分,例如,
    ->offset(10)->limit(10)
    将自动为MySQL和PostgreSQL等生成正确的
    offset
    limit
    变量以及类似的子句
  • 作为“ORM”系统的一部分,查询结果将根据查询的表和列自动映射到相应类的模型对象中
  • 为了向后兼容性或安装要求(例如,在特定安装中,表“news”实际上可能被称为“app1_news”,以避免与其他应用程序发生冲突),从表和列的确切名称中抽象出来
  • 处理参数化查询,如示例中所示;尽管与这种抽象基本无关,但它们提供的不仅仅是转义,因为DBMS(MySQL或任何正在使用的)知道查询的哪些部分是固定的,哪些是可变的,这对性能和安全性都很有用

最新的php框架开发人员正在使用AR(活动记录)/DAO(数据库访问对象)模式。因为它比原始查询速度更快。现在AR技术最初是由PDO(php数据对象)构建的

为什么活动记录真的很快?

它真正的查询编写是开发人员的最佳习惯。但是有些问题使它变得困难

1。在编写插入和更新大型查询时,有时很难匹配每一行的值。。但这会让事情变得容易。您只需先添加数组,然后即可轻松执行。
2.不管您使用什么数据库。
3.有时,如果查询有很多条件,那么它确实很难读取或写入。但在AR中,您可以为一个查询级联多个对象。

4.AR节省您重复语句的时间

我认为在codeigniter中实现activerecord适用于小而简单的查询。 当您需要包含大量连接的复杂查询时,更清楚的是只编写查询本身


我认为,如果您具有一定的SQL技能,那么额外的抽象层永远不会给您带来更好的性能

DAO并不一定更快。相反,有很多代码将DAL接口转换为实际的SQL查询,这肯定比自己编写查询要慢。此外,手工编制的查询通常比DAL根据模板和常见案例自行拼凑的查询更有效。