为了账号安全,请及时绑定邮箱和手机立即绑定

$PDOStatement的问题

self::execcute中用self::free释放了$PDOStatement后就直接执行了exec()。如果连接没错,sql语句出错了,self::haveErrorThrowException就会根据$PDOStatement是否为空执行不同的操作。但是$PDOStatement不是被free清理后就一直为空吗?为什么会判断不是空的?

正在回答

2 回答

主要是haveErrorThrowException中的这句:

 $obj=empty($this->PDOStatement)?self::$link:$this->PDOStatement;
 $arrError=$obj->errorInfo();

因为pdo类(self::$link)有自己的errorInfo方法,同样PDOStatement
类同样有重名的errorInfo方法,所以这里必须现清空下,否则的话很有可能执行的是PDOStatement中的errorInfo方法.

0 回复 有任何疑惑可以回复我~

百度找不到确切的答案,只是说PDOStatement是存储一条预处理语句。但我的猜想是,PDOStatement除了可以存储预处理,还能存储exec返回的结果集。这样语句就能理解了

0 回复 有任何疑惑可以回复我~
#1

坚持MyDream

如果exec();执行出问题。那么,因为下面这个语句 (370行) $obj=empty(self::$PDOStatement)?self::$link:self::$PDOStatement; 因为这语句,$obj=$link; 你可以试试,这时候,当exec()执行成功时,$arrErr=$link->errorInfo();获得的$arrErr[0]的值应该是00000 失败时,值就不是00000 也就是说,exec()的错误信息,你可以通过$link->errorInfo()提取。 ($link->exec($sql))
2016-12-28 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

$PDOStatement的问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信