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

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

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

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

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


1、PDOStatement::errorInfo

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

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

Element Information
0 SQLSTATE 错误码(一个由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时

你可能感兴趣的:(pdo mysql长时间连接断掉时获取错误信息)