$PDOStatement的问题

来源:5-4 [PDO] 数据库操作类之获取一条记录

gakeez

2016-11-01 18:20

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

写回答 关注

2回答

  • nadirvishun
    2017-02-11 11:49:25

    主要是haveErrorThrowException中的这句:

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

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

  • gakeez
    2016-11-01 18:36:02

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

    坚持MyDr...

    如果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 17:25:41

    共 1 条回复 >

PDO—数据库抽象层

本教程主要通过实战演练深入剖析PDO以加深理解

30036 学习 · 396 问题

查看课程

相似问题