Php 当其他未缓冲查询处于活动状态时,无法执行查询

Php 当其他未缓冲查询处于活动状态时,无法执行查询,php,mysql,pdo,Php,Mysql,Pdo,好的,我已经开发了这个网站(业余)使用本地测试服务器与PHP 5.4(工作100%),但在上传到远程主机,我有不停的问题,可能所有的PHP版本的差异造成的。远程服务器使用PHP5.1。在此页面上,从上一页传递一个值,该值用于填写表单 我通过反复试验来追踪这个问题,但不知道是什么导致了它,到目前为止,我已经阅读了至少30个相关问题。此页上的代码立即在prepare语句处停止执行。我无法获取任何类型的错误消息 我知道$link连接是打开的,因为在此之前我有一个查询,它工作得非常好 if (('POS

好的,我已经开发了这个网站(业余)使用本地测试服务器与PHP 5.4(工作100%),但在上传到远程主机,我有不停的问题,可能所有的PHP版本的差异造成的。远程服务器使用PHP5.1。在此页面上,从上一页传递一个值,该值用于填写表单

我通过反复试验来追踪这个问题,但不知道是什么导致了它,到目前为止,我已经阅读了至少30个相关问题。此页上的代码立即在prepare语句处停止执行。我无法获取任何类型的错误消息

我知道$link连接是打开的,因为在此之前我有一个查询,它工作得非常好

if (('POST' === $_SERVER['REQUEST_METHOD']) && (isset($_POST['details'])))
{
$sql='select * from this where that=:that';
echo $sql; //added for testing
$query=$link->prepare($sql);
echo "this never shows up"; //verified problem area
$query->bindValue(':that', $_POST['details']);
$query->execute();
$row=$query->fetch();
//more things
}
感谢大家的帮助

编辑: 未适当注意,错误:

当其他未缓冲查询处于活动状态时,无法执行查询。 考虑使用pdoCalp::FutAccess()。或者,如果您的代码 只在mysql上运行,您可以启用查询 通过设置PDO::MYSQL\u ATTR\u USE\u BUFFERED\u查询属性进行缓冲

当我注释掉前面的查询时,会出现非常模糊的错误。这很奇怪,因为前面的查询有好几页,没有问题。另外,它只返回一个结果,所以我不确定这个错误的真正含义。 以下是前面的查询:

$sql='select bgcolor from settings inner join users on id=userid where username=:user';
$query=$link->prepare($sql);
$query->bindValue(':user', $_SESSION['Username']);
$query->execute();
$row=$query->fetch();
$rgb = str_split($row['bgcolor'], 3);

它在每个页面上运行(因为我是新的、效率低下的,并且不保存会话和COOKIE),在这之前运行良好。但它只返回一个结果。

我使用了
$query->closeCursor(),如某些链接SO问题中所述,用于此页面上执行的每个select查询以达到工作状态

这还不太理想,我希望我们能够确定这个问题的真正原因和解决方案。不幸的是,我没有服务器配置权限来检查其他一些解决方案

这也行得通,但一些评论指出这对他们不起作用:

$link->setAttribute (PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);

我使用了
$query->closeCursor(),如某些链接SO问题中所述,用于此页面上执行的每个select查询以达到工作状态

这还不太理想,我希望我们能够确定这个问题的真正原因和解决方案。不幸的是,我没有服务器配置权限来检查其他一些解决方案

这也行得通,但一些评论指出这对他们不起作用:

$link->setAttribute (PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);

这不一定是这个问题的答案,但这可能对将来的人有所帮助

我遇到了完全相同的错误,花了几个小时才发现哪里出了问题。事实证明,这只是一个非常小的语法问题。如果您实际上没有使用任何缓冲,但仍然有这个错误,就像我所做的,这可能是您的问题-所以检查您的代码

我在执行常规数据库查询时遇到了这个错误——不是故意使用任何缓冲技术——因此我高度怀疑它与缓冲有关。我阅读了每一个关于它的问题,并深入研究了它

这是我愚蠢的语法问题:

$SQL = "UPDATE articles SET
            topicID = :topic;    <-------- semicolon - woops!
            heading = :heading,
            subheading = :subheading,
            keywords = :keywords,
            rawContent = :rawContent,
            content = :content,
            ...
            ...
$SQL=“更新文章集

topicID=:topic;这不一定是这个问题的答案,但这可能对将来的某个人有所帮助

我遇到了完全相同的错误,花了几个小时才发现错误所在。结果表明,这只是一个非常小的语法问题。如果您实际上没有使用任何缓冲,但仍然存在此错误,就像我一样,这可能是您的问题-因此请检查您的代码

我在执行常规数据库查询时遇到了这个错误——不是故意使用任何缓冲技术——因此我高度怀疑它与缓冲有关。我阅读了所有关于它的问题,并深入研究了它

这是我愚蠢的语法问题:

$SQL = "UPDATE articles SET
            topicID = :topic;    <-------- semicolon - woops!
            heading = :heading,
            subheading = :subheading,
            keywords = :keywords,
            rawContent = :rawContent,
            content = :content,
            ...
            ...
$SQL=“更新文章集

topicID=:主题;我猜查询中出现语法错误,请参阅try with double quotes$link->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);并且在本地主机上工作得非常好。必须在PHP问题上有所不同。(上一个问题是filter_var在5.2之前不受支持:()您的编辑使其听起来好像有一个结果等待枚举。请参阅此答案:您是否有一个在共享代码之前运行的挂起查询?我猜查询中存在语法错误,请参阅try with double quotes$link->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);并且在localhost上运行得非常好。在PHP问题上必须有所不同。(上一个问题是5.2之前不支持的筛选器_var:()您的编辑使其听起来好像有一个结果等待枚举。请参阅以下答案:您是否有一个在共享代码之前运行的挂起查询?这实际上是正确的解决方案。MySQL要求您在启动另一个查询之前关闭一个查询。您得到的错误只是PDO声明了这一事实。您可以自动使用PDO通过$cursor->fetchAll()或通过设置$link->setAttribute(PDO::MYSQL\u ATTR\u USE\u BUFFERED\u QUERY,true)关闭光标,但这两种方法都会将整个数据集读取到内存中,如果您有很多行,这将是一个问题。一个接一个地获取数据,然后在完成后关闭光标是首选方法。这实际上是正确的解决方案。MySQL要求您先关闭一个查询,然后再开始另一个查询。您遇到的错误只是PDO statin您可以让PDO通过$cursor->fetchAll()或通过设置$link->setAttribute(PDO::MYSQL\u ATTR\u USE\u BUFFERED\u QUERY,true)自动关闭光标,但这两种方法都会将整个数据集读取到内存中,如果有很多行,这将是一个问题。首选方法是逐个获取数据,然后在完成后关闭光标。