gakeez
2016-11-01 18:20
self::execcute中用self::free释放了$PDOStatement后就直接执行了exec()。如果连接没错,sql语句出错了,self::haveErrorThrowException就会根据$PDOStatement是否为空执行不同的操作。但是$PDOStatement不是被free清理后就一直为空吗?为什么会判断不是空的?
主要是haveErrorThrowException中的这句:
$obj=empty($this->PDOStatement)?self::$link:$this->PDOStatement; $arrError=$obj->errorInfo();
因为pdo类(self::$link)有自己的errorInfo方法,同样PDOStatement
类同样有重名的errorInfo方法,所以这里必须现清空下,否则的话很有可能执行的是PDOStatement中的errorInfo方法.
百度找不到确切的答案,只是说PDOStatement是存储一条预处理语句。但我的猜想是,PDOStatement除了可以存储预处理,还能存储exec返回的结果集。这样语句就能理解了
PDO—数据库抽象层
30043 学习 · 396 问题
相似问题