Thinkphp PDO::MYSQL_ATTR_USE_BUFFERED_QUERY问题

浏览:6311 发布日期:2017/04/14 分类:技术分享 关键字: PDO MYSQL_ATTR_USE_BUFFERED_QUERY
错误提示
SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll(). Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute. $sql = 'SHOW COLUMNS FROM ' . $tableName;
        // 调试开始
        $this->debug(true);
        $pdo = $this->linkID->query($sql);
        // 调试结束
        $this->debug(false, $sql);
        $result = $pdo->fetchAll(PDO::FETCH_ASSOC);
在本地测试良好,放到阿里服务器上就出现错误提示。找过度娘,问过谷歌。找到的答案如下
1.寻找服务器商帮你解决
2.php 官网给出的是设置pdo属性
3.Thinkphp网站答案'params' => [
\PDO::ATTR_PERSISTENT => true,
\PDO::ATTR_CASE => \PDO::CASE_LOWER,
],
以上的方法都试过,还是不行。最后只能去翻Thinkphp5.0的最底层文件 Connection.php,关于'param'属性设置// PDO连接参数
    protected $params = [
        PDO::ATTR_CASE              => PDO::CASE_NATURAL,
        PDO::ATTR_ERRMODE           => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_ORACLE_NULLS      => PDO::NULL_NATURAL,
        PDO::ATTR_STRINGIFY_FETCHES => false,
        PDO::ATTR_EMULATE_PREPARES  => false,
    ];
在不断尝试修改这里的属性,然后放到服务器上去测试,查看结果。找到了最终的答案。

最终问题就是在这个部分。在操作的时候不建议去修改Thinkphp5.0的最底层文件。所以我它放到配置文件 app/database.php里面

正确代码'params'         => [
        PDO::ATTR_CASE              => PDO::CASE_LOWER,
        PDO::ATTR_EMULATE_PREPARES  => true,
    ],
以上问题才搞定
最佳答案
评论( 相关
后面还有条评论,点击查看>>