问答详情
源自:5-4 [PDO] 数据库操作类之获取一条记录

$PDOStatement的问题

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

提问者:gakeez 2016-11-01 18:20

个回答

  • 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返回的结果集。这样语句就能理解了