我们同时收到PDOException和警告。这些警告使我们发疯。
警告:PDOStatement :: execute():MySQL服务器已在第120行的/home/Database.php中消失了
警告:PDOStatement :: execute():在第120行的/home/Database.php中读取结果集的标头时出错
这是执行此操作的代码- 这只是为了模拟断开连接:
$db = new PDO('mysql:dbname=' . $name . ';host=' . $host, $user, $pass); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); $statement = $db->prepare('SET SESSION wait_timeout = 1'); $statement->execute(); sleep(3); try { $statement = $db->prepare('SELECT 1'); $statement->execute(); } catch (PDOException $e) { echo 'Exception! Err #:' . $e->errorInfo[1] . PHP_EOL; }
编辑:问题是为什么这会生成警告和异常。即使我们专门告诉PDO抛出异常,上面的代码也只会生成这两者。
上面的代码使它的发生比等待服务器默认的wait_timeout更快。
编辑2:我不确定为什么关闭它。问题是,为什么无论PDO错误级别如何,PHP都生成警告和异常?