如何访问mysqli_sql_exception对象的$ sqlstate属性?

时间:2014-01-12 18:23:52

标签: php exception mysqli

mysqli_sql_exception class定义 protected $sqlstate属性,手册将其定义为“带错误的sql状态”。但是,似乎没有定义相应的getter方法,例如。 getSqlstate()似乎不存在!?手册中没有记录任何内容。

您希望如何访问此属性?

1 个答案:

答案 0 :(得分:2)

这里有几个可能(丑陋)的解决方法来阅读受保护的$sqlstate属性。该属性似乎具有合法价值,因此这里似乎缺少一些东西!?

方法1 使用反射,目前尚未经过测试。

方法2 将对象强制转换为数组并读取受保护的属性(前缀为*并用空字节包围!)

try {

    /* Code throws mysqli_sql_exception */

} catch (mysqli_sql_exception $e) {

    // 1. Reflection
    //    Requires PHP 5.3+ for the setAccessible() method
    $reflect = new ReflectionClass($e);
    $property = $reflect->getProperty('sqlstate');
    $property->setAccessible(true); // PHP 5.3
    $sqlstate = $property->getValue($e);

    /* OR */

    // 2. Cast to an array and access "protected" property
    $eArr = (array)$e;
    $sqlstate = $eArr["\0*\0sqlstate"];

}