以下内容已同步至CSDN
绝了,laravel使用的是illuminate/database作为orm,我们用的swoole,在使用过程中报了如下错误:
SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll()
这个错误在网上一搜就能找到解决办法,就是给pdo加上一个params,‘MYSQL_ATTR_USE_BUFFERED_QUERY’ => true,嚯,但是laravel和illuminate/database的文档都没有说怎么加这个params。。。真就大无语事件发生。我还是不死心网上各种搜解决办法,当然是一无所获,不然也不会有这篇博客了。原本想省事偷懒的我终究还是不得不去看源码,终于让我找到了这个东西:
经过分析,这个玩意儿就是把配置中的options加载进去,虽然按照正常人的思维,这玩意儿要是叫params我直接就能试出来,根本不用看源码了的说。
/**
* Get the PDO options based on the configuration.
*
* @param array $config
* @return array
*/
public function getOptions(array $config)
{
$options = $config['options'] ?? [];
return array_diff_key($this->options, $options) + $options;
}
所以说,对于使用illuminate/database的框架来说,给pdo加选项就这这样的
'default' => [
'fetch' => PDO::FETCH_CLASS,
'driver' => 'mysql',
'host' => 'localhost',
'port' => '3306',
'username' => '',
'password' => '',
'database' => 'test',
'charset' => 'latin1',
'collation' => 'latin1_general_ci',
'prefix' => '',
'strict' => false,
// 数据库连接参数
'options' => [
'MYSQL_ATTR_USE_BUFFERED_QUERY' => true,
],
],
当然,你要是想也可以直接用原生的方法pdo连接,自然就不存在什么配置不好搞的问题了