1、注意红色框框部分,使用的是同一个数据库的连接对象 $pdo
2、第一次使用以后关闭了cursor,$stmt->closeCursor();
3、第二次 $pdo 查询的时候,采用了 $stmt->fetch() 的方式取数据 (通过 PDO::MYSQL_ATTR_USE_BUFFERED_QUERY 快速 dump 数据) $val 的值是空的,也就是说 while 这个 fetch 失败了。通过设置 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 发现抛出了 'SQLSTATE[HY000]: General error: 2050 ' 的异常。
解决办法是在第一次查询 $stmt->closeCursor(); 之后,对这个 $stmt 进行 null 销毁,即 $stmt = null; 加在 195 行后面, 或者换一个新的变量(参考这个问题 http://amiteshkumar.wordpress.com/2010/08/24/php-pdo-error-fix-sqlstatehy000-general-error-2050/ )。
通过一些资料查找,这个应该是很久以前的历史问题了, 不过觉得很怪异。
参考资料链接地址:http://www.justskins.com/forums/35793-com-general-error-25815.html