pdo mysql长时间连接断掉时获取错误信息

做守护进程时,必须开启长时间的mysql连接,通常使用长连接方式,但是长连接会导致连接池膨胀,而且长连接也是有可能断掉的。

所以应该在查询时加上错误信息判断,判断到连接断开的话,必须马上重连并再次查询,才能保证守护进程的持续运行。

像通常使用的mysql扩展(现在用mysqli替代了)中,使用mysql_error函数就可以获得上一次请求的错误文字信息

而很多童鞋使用的是pdomysql扩展,在pdo中又怎样获取错误信息呢。通过以下两种方式:


1、PDOStatement::errorInfo

如果查询用预处理语句方式,可以引用预处理对象的errorInfo方法

PDOStatement::errorInfo()返回一个关于上一次语句句柄执行操作的错误信息的数组 。该数组包含下列字段:

ElementInformation
0SQLSTATE 错误码(一个由5个字母或数字组成的在 ANSI SQL 标准中定义的标识符)。
1具体驱动错误码。
2具体驱动错误信息。


结果类似:

Array(

    [0] => 42S02

    [1] => -204

    [2] => [IBM][CLI Driver][DB2/LINUX] SQL0204N "DANIELS.BONES" is an undefined name. SQLSTATE=42704

)


如果是连接断掉的错误,array[2]的字串会是“MySQL server has gone away”或者“Lost connection to MySQL server”


2、PDO::getAttribute(PDO::ATTR_SERVER_INFO)

应用pdo连接对象的getAttribute方法并定义参数为PDO::ATTR_SERVER_INFO
该方法和参数返回的是数据库连接的服务器信息属性值

结果类似:

Uptime: 9696057  Threads: 20  Questions: 348373738  Slow queries: 2149  Opens: 81755  Flush tables: 1  Open tables: 1193  Queries per second avg: 35.929

如果是连接断掉的错误,结果会是类似“MySQL server has gone away”或者“Lost connection to MySQL server”的字串,或者是false


总结

根据你的代码,选择上面两种的其中之一,判断到连接断掉的话,就重连数据库

判断的时机是,:

1、预处理对象引用execute 执行操作,返回是false时

2、连接对象引用query 执行操作,返回是false时

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值