与mysql_query命令相比,我更习惯于Pdo命令,但是我将在一个新项目中使用它们。
我想知道,对于不持久的连接,最好关闭连接,或者关闭它不会造成问题(比如在mysql_query上)。
第二个问题是:完整的Pdo连接器在性能上存在差异。
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);而无胸牌的那个呢?
$dbh = new PDO('mysql:host=localhost', $user, $pass);我需要一个web应用程序使用多个db,我会选择在每个查询上设置dbname.dbtable,而不是在不同的db上打开两个或多个连接。
最终还有别的办法吗?
发布于 2014-11-12 14:10:25
$dbh未设置或超出作用域时)。这与ext/mysql和几乎所有其他数据库连接器的情况相同。当您知道您已经完成了连接以释放它可能占用的最小资源时,您可以手动关闭它,但在实践中,它通常并不值得。dbname所做的唯一的事情就是告诉数据库服务器您想使用哪个数据库。唯一的不同之处在于,您不需要每次引用一个表时都使用db.table.column格式,您只需使用table.column,它就可以理解您正在谈论的是哪个数据库。没有什么不同之处值得提及。发布于 2014-11-12 14:14:56
如果稍后您必须执行selectdb()-type调用,则无db版本实际上效率较低。这必须作为一个单独的查询发送,这比在原始调用中发送它的开销要高得多。
请注意,您不必设置默认DB。您可以将所有查询写成绝对的。
SELECT fieldname FROM dbname.tablename ...还请注意,除非您创建持久连接,否则PHP将在脚本退出和清理操作启动时自动销毁DB连接。除非您对DB使用持久连接,否则在脚本退出时不可能让连接保持打开状态。
从理论上讲,持久的联系听起来可能不错,但它们会引发一系列问题。例如,你启动了一个事务,做了一堆事情,然后脚本就因为某种原因消失了。由于它是通过持久化事务完成的,所以到DB的连接保持打开,事务保持正常运行,然后一些其他php脚本触发,并从池中分配这个陈旧的连接。
现在你有麻烦了。原始脚本的事务仍然处于活动状态,处于某种不确定的中间状态。新脚本不知道它会得到这个垃圾填充的连接,只会启动它自己的操作。你很容易就会有死锁,提交坏数据等等.就因为这个。
通常,应该避免MySQL中的持久连接。它的连接协议实际上很轻,并且开销很小。使用持久性康涅狄格池节省的时间远远超过了从以前失败的脚本获得陈旧/垃圾充斥的连接的危险。
发布于 2014-11-12 14:09:07
从文档 -
当成功连接到数据库时,PDO类的一个实例将返回给您的脚本。连接在PDO对象的生存期内保持活动状态。要关闭连接,您需要通过确保删除对它的所有其余引用来销毁对象--通过将NULL赋值给保存对象的变量来做到这一点。如果不显式地这样做,PHP将在脚本结束时自动关闭连接。
因此,当脚本结束时,它将关闭,但我发现在每次查询之后关闭PDO连接始终是一个很好的做法。
https://stackoverflow.com/questions/26888870
复制相似问题