我是靠谱客的博主 善良茉莉,最近开发中收集的这篇文章主要介绍mysql查询报错2014_MySQL错误2014的原因其他未缓冲的查询处于活动状态时无法执行查询...Error in query:,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

我的服务器运行CentOS 6.4,并使用yum和CentOS的存储库安装MySQL 5.1.69,以及使用yum和ius的存储库安装的PHP

5.4.16。 Edit3

升级到MySQL服务器版本:5.5.31由IUS社区项目分发,并且错误仍然存​​在。然后将库更改为mysqlnd,似乎消除了该错误。仍然要反复进行此操作,以了解为什么有时仅出现此错误。

使用PDO并使用创建PDO对象时PDO::ATTR_EMULATE_PREPARES=>false,有时会出现以下错误:

Table Name - zipcodes

Error in query:

SELECT id FROM cities WHERE name=? AND states_id=?

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.

File Name: /var/www/initial_install/build_database.php

Line: 547

Time of Error: Tuesday July 2, 2013, 5:52:48 PDT

547行是以下内容的最后一行:

$stmt_check_county->execute(array($data[5],$data[4]));

if(!$county_id=$stmt_check_county->fetchColumn())

{

$stmt_counties->execute(array($data[5]));

$county_id=db::db()->lastInsertId();

}

//$stmt_check_county->closeCursor(); //This will fix the error

$stmt_check_city->execute(array($data[3],$data[4]));

几年前,我遇到了类似的问题,但是从PHP 5.1升级到PHP 5.3(并且MySQL可能也进行了更新),问题神奇地消失了,现在我使用PHP 5.5。

为什么它只在时出现PDO::ATTR_EMULATE_PREPARES=>false,并且只有PHP的交替版本?

我还发现这closeCursor()也可以修复错误。是否应该始终SELECT在fetchAll()不使用每个查询之后执行此操作?请注意,即使查询SELECT

COUNT(col2)仅返回一个值,该错误仍然会发生。

编辑

顺便说一下,这就是我创建连接的方式。我只是最近才添加的MYSQL_ATTR_USE_BUFFERED_QUERY=>true,但是它不能解决错误。

另外,以下脚本可以按原样使用以创建错误。

function sql_error($e,$sql=NULL){return('

Error in query:

'.$sql.'

'.$e->getMessage().'

File Name: '.$e->getFile().' Line: '.$e->getLine().'

');}

class db {

private static $instance = NULL;

private function __construct() {} //Make private

private function __clone(){} //Make private

public static function db() //Get instance of DB

{

if (!self::$instance)

{

//try{self::$instance = new PDO("mysql:host=localhost;dbname=myDB;charset=utf8",'myUsername','myPassword',array(PDO::ATTR_EMULATE_PREPARES=>false,PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION,PDO::ATTR_DEFAULT_FETCH_MODE=>PDO::FETCH_ASSOC));}

try{self::$instance = new PDO("mysql:host=localhost;dbname=myDB;charset=utf8",'myUsername','myPassword',array(PDO::ATTR_EMULATE_PREPARES=>false,PDO::MYSQL_ATTR_USE_BUFFERED_QUERY=>true,PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION,PDO::ATTR_DEFAULT_FETCH_MODE=>PDO::FETCH_ASSOC));}

//try{self::$instance = new PDO("mysql:host=localhost;dbname=myDB;charset=utf8",'myUsername','myPassword',array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION,PDO::ATTR_DEFAULT_FETCH_MODE=>PDO::FETCH_ASSOC));}

catch(PDOException $e){echo(sql_error($e));}

}

return self::$instance;

}

}

$row=array(

'zipcodes_id'=>'55555',

'cities_id'=>123

);

$data=array($row,$row,$row,$row);

$sql = 'CREATE TEMPORARY TABLE temp1(temp_id INT UNSIGNED NOT NULL AUTO_INCREMENT, PRIMARY KEY (temp_id) )';

db::db()->exec($sql);

$sql='SELECT COUNT(*) AS valid FROM cities_has_zipcodes WHERE cities_id=? AND zipcodes_id=?';

$stmt1 = db::db()->prepare($sql);

$sql ='SELECT temp_id FROM temp1';

$stmt2 = db::db()->prepare($sql);

foreach($data AS $row)

{

try

{

$stmt1->execute(array($row['zipcodes_id'],$row['cities_id']));

$rs1 = $stmt1->fetch(PDO::FETCH_ASSOC);

//$stmt1->closeCursor();

syslog(LOG_INFO,'$rs1: '.print_r($rs1,1).' '.rand());

$stmt2->execute();

$rs2 = $stmt2->fetch(PDO::FETCH_ASSOC);

syslog(LOG_INFO,'$rs2: '.print_r($rs2,1).' '.rand());

}

catch(PDOException $e){echo(sql_error($e));}

}

echo('done');

最后

以上就是善良茉莉为你收集整理的mysql查询报错2014_MySQL错误2014的原因其他未缓冲的查询处于活动状态时无法执行查询...Error in query:的全部内容,希望文章能够帮你解决mysql查询报错2014_MySQL错误2014的原因其他未缓冲的查询处于活动状态时无法执行查询...Error in query:所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部