我正在尝试执行我的php代码,它通过mysqli调用两个mysql查询,并得到错误“命令不同步;现在不能运行此命令”。
这是我正在使用的代码
<?php
$con = mysqli_connect("localhost", "user", "password", "db");
if (!$con) {
echo "Can't connect to MySQL Server. Errorcode: %s\n". Mysqli_connect_error();
exit;
}
$con->query("SET NAMES 'utf8'");
$brand ="o";
$countQuery = "SELECT ARTICLE_NO FROM AUCTIONS WHERE upper(ARTICLE_NAME) LIKE % ? %";
if ($numRecords = $con->prepare($countQuery)) {
$numRecords->bind_param("s", $brand);
$numRecords->execute();
$data = $con->query($countQuery) or die(print_r($con->error));
$rowcount = $data->num_rows;
$rows = getRowsByArticleSearch("test", "Auctions", " ");
$last = ceil($rowcount/$page_rows);
} else {
print_r($con->error);
}
foreach ($rows as $row) {
$pk = $row['ARTICLE_NO'];
echo '<tr>' . "\n";
echo '<td><a href="#" onclick="updateByPk(\'Layer2\', \'' . $pk . '\')">'.$row['USERNAME'].'</a></td>' . "\n";
echo '<td><a href="#" onclick="updateByPk(\'Layer2\', \'' . $pk . '\')">'.$row['shortDate'].'</a></td>' . "\n";
echo '<td><a href="#" onclick="deleterec(\'Layer2\', \'' . $pk . '\')">DELETE RECORD</a></td>' . "\n";
echo '</tr>' . "\n";
}
function getRowsByArticleSearch($searchString, $table, $max) {
$con = mysqli_connect("localhost", "user", "password", "db");
$recordsQuery = "SELECT ARTICLE_NO, USERNAME, ACCESSSTARTS, ARTICLE_NAME, date_format(str_to_date(ACCESSSTARTS, '%d/%m/%Y %k:%i:%s'), '%d %m %Y' ) AS shortDate FROM AUCTIONS WHERE upper(ARTICLE_NAME) LIKE '%?%' ORDER BY str_to_date(ACCESSSTARTS, '%d/%m/%Y %k:%i:%s')" . $max;
if ($getRecords = $con->prepare($recordsQuery)) {
$getRecords->bind_param("s", $searchString);
$getRecords->execute();
$getRecords->bind_result($ARTICLE_NO, $USERNAME, $ACCESSSTARTS, $ARTICLE_NAME, $shortDate);
while ($getRecords->fetch()) {
$result = $con->query($recordsQuery);
$rows = array();
while($row = $result->fetch_assoc()) {
$rows[] = $row;
}
return $rows;
}
}
}
我试过仔细阅读这篇文章,但我不知道该怎么办。我读过关于存储结果和免费结果的文章,但是在使用它们的时候它们并没有什么区别。我不确定这个错误究竟是在哪一点造成的,我想知道为什么会造成这个错误,以及如何修复它。
根据我的调试语句,countquery的第一个if循环甚至没有被输入,因为我的sql语法中有一个错误 '% ? %'
. 但是如果我选择 *
我没有尝试基于like子句进行限制,而是仍然得到命令不同步错误。
21条答案
按热度按时间jdg4fx2g16#
一旦你用过
您可以关闭它以使用另一个查询。
这个问题困扰了我好几个小时。希望它能解决你的问题。
t1rydlwq17#
如果您使用缓冲或非缓冲结果集来获取数据,那么在获取所有数据之后,首先必须从内存中清除获取的数据。因为在清除获取的内存之前,不能在同一个连接上执行另一个mysql过程。在脚本的右端添加下面的函数,这样就可以解决问题
php文档中的参考
i7uq4tfw18#
我在使用dbal querybuilder时遇到了这个错误。
我用querybuilder创建了一个查询,它使用列subselect,也用querybuilder创建。子选择仅通过
$queryBuilder->getSQL()
没有被执行。创建第二个子选择时出错。通过临时执行每个子选择$queryBuilder->execute()
使用前$queryBuilder->getSQL()
,一切正常。就好像$queryBuilder->connection
对于在执行当前准备的sql之前创建新sql,保持无效状态,尽管每个子选择上都有新的querybuilder示例。我的解决方案是在不使用querybuilder的情况下编写子select。
cbjzeqam19#
另一个原因:store\u result()不能调用两次。
例如,在下面的代码中,将打印错误5。
(这可能与原始示例代码无关,但可能与寻求此错误答案的人员有关。)
nnvyjq4y20#
每次在使用$mysqli->query处理存储过程之前,我都会调用这个函数。
qnyhuwrf21#
这与最初的问题无关,但我收到了相同的错误消息,此线程是google中的第一个热门线程,我花了一段时间才找出问题所在,因此它可能对其他人有用:
我没有使用mysqli,仍然使用mysql\u connect我有一些简单的查询,但是一个查询导致同一个连接中的所有其他查询失败。
我使用mysql 5.7和php5.6,我有一个数据类型为“json”的表。显然,我的php版本没有识别mysql的返回值(php只是不知道如何处理json格式,因为内置的mysql模块太旧了(至少我认为是这样))
现在我把json字段类型改为text(现在我不需要原生的mysql json功能),一切正常