使用PDO建立与数据库的连接时,是否应该每次使用PDO属性PDO :: ATTR_PERSISTENT?它说这会为该用户创建一个持久连接,并且会在每次请求数据库连接时获取相同的连接,而不是重新建立一个新连接。为什么这不是默认?有没有理由不使用它?是否应该每次都使用PDO :: ATTR_PERSISTENT?
19
A
回答
12
持续连接的问题是可用于MySQL的连接数量是有限的。如果出现问题并且连接未关闭,服务器将长时间保持打开状态。如果服务器的连接耗尽,那么与之相关的每个应用程序都将不可用,直到有人介入。
您可能会经常发现某些问题会出错,并且在错误的情况下,资源过度使用的问题可能会在几个月内泄漏,如果不注意的话,会使您的性能逐渐降低,并且会增加随着时间的推移系统利用率(全部没有收益)。
这是一篇很好的文章,可以帮助你。它专注于MySQL,但大部分相同的想法可以在DBMS的范围内进行概括。
+1
第一个链接已损坏。 – 2015-10-16 13:18:39
44
如果不正确地处理事务时,可以导致一个“新”的持续性已经在一个事务中的连接,这可能会导致混乱。所引起的下列代码
只是一个简单的例子:
<?php
$pdo = getCustomPersistantPDO();
$pdo->beginTransaction();
if(rand() % 2 === 0) {
//simulate a poorly handled error
exit();
}
$pdo->commit();
?>
请求1:
(starts w/o a transaction open)
openTransaction
incorrectly handled error
(never closes transaction)
请求2:
(start w/ a transaction open, because it was not closed in the previous connection.)
openTransaction -> fails due to already open
BTW示例的正确版本是:
<?php
$pdo = getCustomPersistantPDO();
$pdo->beginTransaction();
if(rand() % 2 === 0) {
//simulate a correctly handled error
$pdo->rollBack();
exit();
}
$pdo->commit();
?>
+19
+1用于证明恐怖 – Charles 2011-05-13 22:01:22
相关问题
- 1. PHP PDO :: lastInsertId()和ATTR_PERSISTENT
- 2. 令牌应该每次都改变吗?
- 3. 这是否每次都打db?
- 4. 重置密码链接是否应该每次都有所不同?
- 5. 使用PDO :: ATTR_PERSISTENT => true连接字符串
- 6. HttpPostedFileBase每次都是空的
- 7. HttpContext.Current.User.Identity.Name每次都是空的
- 8. PDO MySQL:是否使用PDO :: ATTR_EMULATE_PREPARES?
- 9. 我可以缓存WaitForEndOfFrame,还是应该每次使用yield new?
- 10. 4个选项应该写入textarea每次更改都正确
- 11. 我应该怎么做,让相机每次都能工作?
- 12. 我应该在每次写入ServletOutputStream时都刷新它?
- 13. 刷新页面,每次刷新时都应该发布数据?
- 14. android通知ID应该每次都不一样
- 15. 每次在PDO准备后,绑定参数是否必要?
- 16. 应该总是使用MySQL的项目使用PDO?
- 17. 每次使用PDO数据库类而不创建新连接?
- 18. Spring每个方法都应该使用AOP代理bean调用
- 19. 每次都调用jQuery ajaxComplete?
- 20. 每次使用ArrayAdapter都会崩溃应用程序。 Android Studio 2.0
- 21. 我们是否应该每<input>使用<label>?
- 22. 是否每次调用mysql_real_escape_string都需要再次访问数据库?
- 23. 是否每次都调用MakeGenericType(...)多次创建一个新类型?
- 24. 应该每个表都有主键吗?
- 25. 我应该使用什么PDO查询?
- 26. 当进行相同的PDO查询(改变参数)时,我每次都调用prepare(),还是只调用一次?
- 27. 应该每个表都有使用ADO.NET的主键吗?
- 28. DocuSign Connect响应每次都为空
- 29. 是否每次查询PostgreSQL VIEWS时都会新建它们?
- 30. jQuery .click函数是否每次都执行?
你能否更新这个以便其他答案被接受?我试图删除我的,因为肯德尔的情况好多了,但不能,因为我接受了。 – 2015-10-16 13:37:48