如何使用 PHP 的 PDO 强制创建新数据库连接以连接到 MySQL
How to force the creation of a NEW DATABASE CONNECTION using PHP's PDO to connect to MySQL
我使用 PHP 连接到 MySQL。
最后,我从废弃的mysql_切换到了PDO界面!我喜欢它,而且效果很好,但是一个挥之不去的问题...
我的问题:new PDO
(使用相同的凭据)是否总是创建到数据库的新连接?
如果是这样,那我就准备好了!
我知道 PDO 中 "Persistent connections" 的选项;我不使用那个选项。
使用旧的 mysql_connect() 函数,我可以使用 new_link 标志强制建立新的数据库连接。我对 new PDO
的理解是否正确,总是会获得新的数据库连接? (除非请求 "persistent connection" - 再一次,我不会这样做。)
如果我理解正确,PDO 与 mysql_connect 相反,因为(假设数据库凭据相同)PDO 总是提供新连接,除非另有说明(即除非请求 "persistent connection")-鉴于默认情况下 mysql_connect 会提供相同的旧连接,除非您强制建立一个新连接。
旁注:至于我为什么要强制建立新连接,这是我实现更 稳健 SQL 查询执行机制的一部分。多年来我发现,当 PHP 脚本用于处理大文件时,偶尔新的 SQL 查询会出现 丢失数据库连接错误 ("the database has gone away");在这些情况下,我的补救措施 - 多年来一直非常有效 - 一直是以下算法:
1) 尝试 运行 SQL 查询
2)万一出错,强行建立新的数据库连接[关键步骤!]然后重新运行SQL查询。如果第二次失败,则放弃并发出 error/log;但是,在大多数情况下,问题消失了,第二次尝试成功了:)
我正在尝试用 PDO 复制那个强大的功能...我在 mysql -> PDO 切换(例如 http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers )上找到了很好的指南,但我仍然很模糊在使用相同凭据创建较早的 PDO 对象的情况下,实例化新的 PDO 对象是否意味着新的数据库连接。
谢谢!!
是的,它是使用给定凭据的新连接实例。您可以通过 MySQL 命令行通过 MySQL SHOW FULL PROCESSLIST 看到这一点,因为它会创建每个新连接和查询,只需要快速处理它或 运行 一些慢速查询。
旁注; 运行再次插入对于数据库设计和 mysql 配置的未优化过程来说是一个有点肮脏的解决方法,我建议重新访问有问题的项目并找到更好的过程方法。最佳
我使用 PHP 连接到 MySQL。
最后,我从废弃的mysql_切换到了PDO界面!我喜欢它,而且效果很好,但是一个挥之不去的问题...
我的问题:new PDO
(使用相同的凭据)是否总是创建到数据库的新连接?
如果是这样,那我就准备好了!
我知道 PDO 中 "Persistent connections" 的选项;我不使用那个选项。
使用旧的 mysql_connect() 函数,我可以使用 new_link 标志强制建立新的数据库连接。我对 new PDO
的理解是否正确,总是会获得新的数据库连接? (除非请求 "persistent connection" - 再一次,我不会这样做。)
如果我理解正确,PDO 与 mysql_connect 相反,因为(假设数据库凭据相同)PDO 总是提供新连接,除非另有说明(即除非请求 "persistent connection")-鉴于默认情况下 mysql_connect 会提供相同的旧连接,除非您强制建立一个新连接。
旁注:至于我为什么要强制建立新连接,这是我实现更 稳健 SQL 查询执行机制的一部分。多年来我发现,当 PHP 脚本用于处理大文件时,偶尔新的 SQL 查询会出现 丢失数据库连接错误 ("the database has gone away");在这些情况下,我的补救措施 - 多年来一直非常有效 - 一直是以下算法:
1) 尝试 运行 SQL 查询
2)万一出错,强行建立新的数据库连接[关键步骤!]然后重新运行SQL查询。如果第二次失败,则放弃并发出 error/log;但是,在大多数情况下,问题消失了,第二次尝试成功了:)
我正在尝试用 PDO 复制那个强大的功能...我在 mysql -> PDO 切换(例如 http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers )上找到了很好的指南,但我仍然很模糊在使用相同凭据创建较早的 PDO 对象的情况下,实例化新的 PDO 对象是否意味着新的数据库连接。
谢谢!!
是的,它是使用给定凭据的新连接实例。您可以通过 MySQL 命令行通过 MySQL SHOW FULL PROCESSLIST 看到这一点,因为它会创建每个新连接和查询,只需要快速处理它或 运行 一些慢速查询。
旁注; 运行再次插入对于数据库设计和 mysql 配置的未优化过程来说是一个有点肮脏的解决方法,我建议重新访问有问题的项目并找到更好的过程方法。最佳