首页 / 知识
关于php:mysqli或PDO – 有什么优缺点?
2023-04-12 08:41:00

mysqli or PDO - what are the pros and cons?在我们的位置,我们将使用mysqli和PDO分为准备语句和事务支持之类的东西。 有些项目使用一个,另一个项目。 我们很难有可能转移到另一个RDBMS。 我更喜欢PDO,因为它允许为预准备语句提供命名参数,据我所知,mysqli没有。 在我们整合项目时只使用一种方法,是否还有其他优点和缺点选择其中一种作为标准? 好吧,你可以争论面向对象的方面,准备好的陈述,它成为一个标准的事实等等。但我知道大多数时候,说服某人使用杀手功能更好地工作。那就是: PDO非常好用的是你可以获取数据,自动将其注入对象中。如果您不想使用ORM(因为它只是一个快速的脚本),但您确实喜欢对象映射,那真的很酷:
将应用程序从一个数据库移动到另一个数据库并不常见,但迟早您可能会发现自己正在使用不同的RDBMS处理另一个项目。如果你在家中使用PDO,那么在这一点上至少要学习一件事。 除此之外,我发现PDO API更直观,感觉更真实的面向对象。如果你知道我的意思,mysqli觉得它只是一个被客观化的程序API。简而言之,我发现PDO更容易使用,但这当然是主观的。
我已经开始使用PDO了,因为在我看来,语句支持更好。我正在使用ActiveRecord-esque数据访问层,并且实现动态生成的语句要容易得多。 MySQLi的参数绑定必须在单个函数/方法调用中完成,因此如果您在运行时之前不知道要绑定多少个参数,则必须使用 最重要的是,我喜欢PDO,因为它是一个非常合理的抽象层次。在完全抽象的系统中使用它很容易,你不想编写SQL,但它也可以很容易地使用更优化的,纯粹的查询类型的系统,或者混合和匹配这两者。 PDO是标准,它是大多数开发人员期望使用的标准。 mysqli本质上是针对特定问题的定制解决方案,但它具有其他DBMS特定库的所有问题。 PDO是所有努力工作和聪明思考的基础。
这里还要记住一些事情:就目前而言(PHP 5.2),PDO库是错误的。它充满了奇怪的错误。例如:在变量中存储
关于PDO的另一个值得注意的(好)差异在于它的
如果您的站点/ Web应用程序真正存在,PDO将使其更容易扩展,因为您可以每天设置主连接和从属连接以在数据库中分配负载,此外PHP正朝着迁移到PDO作为标准。 PDO信息 扩展Web应用程序 从执行速度来看,MySQLi获胜,但除非你有一个使用MySQLi的好包装器,否则它处理预处理语句的功能很糟糕。 我的房子里还有虫子,但如果有人想要的话,就在这里。 所以总之,如果你正在寻找速度增益,那么MySQLi;如果你想要易用性,那么PDO。 编辑回答。
在对这两个API有一些经验之后,我会说有2个阻塞级别的功能使得mysqli无法使用本机预处理语句。 (这个答案中也提到了)
出于某种原因,mysqli都失败了。 然而,直到今天它还没有按价值绑定。 所以,只有一个选择:PDO 所有其他原因,如
没有任何重要意义。 同时,这两个API都缺少一些真正重要的功能,比如
因此,为了满足现实生活需求,必须基于其中一个API创建自己的抽象库,实现手动解析的占位符。在这种情况下,我更喜欢mysqli,因为它具有较低的抽象级别。 我个人使用PDO,但我认为这主要是一个偏好问题。 PDO有一些功能可以帮助SQL注入(准备好的语句),但如果你小心你的SQL,你也可以用mysqli实现。 移动到另一个数据库并不是使用PDO的原因。只要您不使用"特殊SQL功能",就可以从一个DB切换到另一个DB。但是,只要您使用例如"SELECT ... LIMIT 1",就不能转到MS-SQL,它是"SELECT TOP 1 ..."。所以这无论如何都是有问题的。 在我的基准测试脚本中,每个方法都进行了10000次测试,并打印了每种方法的总时间差异。你应该在你自己的配置上,我相信结果会有所不同! 这些是我的结果:
注意:通过对mysqli使用 - > fetch_row(),列名不会添加到数组中,我没有找到在PGO中执行此操作的方法。但即使我使用 - > fetch_array(),mysqli稍慢但仍比PGO快(SELECT NULL除外)。
PDO认为MySQLi不是我真正喜欢的一件事是PDO能够将结果作为指定类类型的对象(例如 要记住一件事。 Mysqli不支持fetch_assoc()函数,该函数将使用表示列名的键返回列。当然可以编写你自己的功能来做到这一点,它甚至不是很长,但我很难写它(对于非信徒:如果它看起来很容易,你可以自己尝试一下并且不要'欺骗:)) |
最新内容
相关内容
python如何读取列表中元素的位置?
python如何读取列表中元素的位置?,位置,数据,异常,培训,字符串,元素,索引,方法,示例,结果,python读取列表中元素位置的方法:1、使用index()方怎么找到苹果电脑 python安装位置
怎么找到苹果电脑 python安装位置,系统,位置,培训,版本,苹果电脑,终端,路径,命令,里面,以上,Mac系统自带python路径为:/System/Library/Framepython支持多继承吗
python支持多继承吗,培训,代码,不了,上边,函数,属性,例子,父亲,定义,母亲,python多继承单继承有时候可能满足不了我们所需的所以我们就会遇到python不定参数传值怎么做
python不定参数传值怎么做,位置,培训,名称,标准,代码,参数,函数,定义,教程,程序,使用*arg_name定义的位置参数,表示任意多个位置参数;Python标python怎么传递不定参数
python怎么传递不定参数,位置,培训,名称,标准,代码,参数,函数,定义,教程,程序,不定长位置参数使用*arg_name定义的位置参数,表示任意多个位置pythonfor语句怎么写
pythonfor语句怎么写,培训,项目,嵌套,内层,外层,循环体,序列,变量,语句,示例,pythonfor循环可以遍历任何序列的项目,如一个列表或者一个字符串python注释一般放在什么位置
python注释一般放在什么位置,代码,位置,培训,注释,时间,引号,可能会,不可或缺,变量,语句,python写代码注释是一件很重要的事情,如果你写的一段python如何定义接受参数的函数
python如何定义接受参数的函数,信息,培训,位置,参数,函数,列子,效果,定义,更多,内容,python中的函数可以有参数,也可以无参数,参数可以分为默认python是否支持字符串
python是否支持字符串,培训,数据,字符串,字符,引号,中文,内容,也就是,源程序,比如说,python要求,字符串必须使用引号括起来,可以使用单引号或者python一行多条语句怎么写
python一行多条语句怎么写,培训,代码,情况,语句,括号,末尾,空格,字符串,也就是,下面,在实际的开发过程中,换行编写代码是经常遇到的情况,下面来python函数的参数有几种
python函数的参数有几种,位置,一致,培训,参数,设计,代码,名字,异常,函数,结果,python中函数的参数可以分为位置参数,关键字参数和默认参数。下pythonpass语句是什么意思
pythonpass语句是什么意思,培训,语句,程序,个位,整数,情形,上面,事情,以上,更多,很多程序都提供了“空语句”支持,Python也不例外,Python的pass