命令不同步;现在不能运行此命令

q5lcpyga  于 2021-06-23  发布在  Mysql
关注(0)|答案(21)|浏览(422)

我正在尝试执行我的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子句进行限制,而是仍然得到命令不同步错误。

jdg4fx2g

jdg4fx2g16#

一旦你用过

stmt->execute();

您可以关闭它以使用另一个查询。

stmt->close();

这个问题困扰了我好几个小时。希望它能解决你的问题。

t1rydlwq

t1rydlwq17#

如果您使用缓冲或非缓冲结果集来获取数据,那么在获取所有数据之后,首先必须从内存中清除获取的数据。因为在清除获取的内存之前,不能在同一个连接上执行另一个mysql过程。在脚本的右端添加下面的函数,这样就可以解决问题

$numRecords->close(); or $numRecords->free(); // This clears the referencing memory, and will be ready for the next MYSQL fetch

php文档中的参考

i7uq4tfw

i7uq4tfw18#

我在使用dbal querybuilder时遇到了这个错误。
我用querybuilder创建了一个查询,它使用列subselect,也用querybuilder创建。子选择仅通过 $queryBuilder->getSQL() 没有被执行。创建第二个子选择时出错。通过临时执行每个子选择 $queryBuilder->execute() 使用前 $queryBuilder->getSQL() ,一切正常。就好像 $queryBuilder->connection 对于在执行当前准备的sql之前创建新sql,保持无效状态,尽管每个子选择上都有新的querybuilder示例。
我的解决方案是在不使用querybuilder的情况下编写子select。

cbjzeqam

cbjzeqam19#

另一个原因:store\u result()不能调用两次。
例如,在下面的代码中,将打印错误5。

<?php

$db = new mysqli("localhost", "something", "something", "something");

$stmt = $db->stmt_init();
if ($stmt->error) printf("Error 1 : %s\n", $stmt->error);

$stmt->prepare("select 1");
if ($stmt->error) printf("Error 2 : %s\n", $stmt->error);

$stmt->execute();
if ($stmt->error) printf("Error 3 : %s\n", $stmt->error);

$stmt->store_result();
if ($stmt->error) printf("Error 4 : %s\n", $stmt->error);

$stmt->store_result();
if ($stmt->error) printf("Error 5 : %s\n", $stmt->error);

(这可能与原始示例代码无关,但可能与寻求此错误答案的人员有关。)

nnvyjq4y

nnvyjq4y20#

每次在使用$mysqli->query处理存储过程之前,我都会调用这个函数。

function clearStoredResults(){
    global $mysqli;

    do {
         if ($res = $mysqli->store_result()) {
           $res->free();
         }
        } while ($mysqli->more_results() && $mysqli->next_result());        

}
qnyhuwrf

qnyhuwrf21#

这与最初的问题无关,但我收到了相同的错误消息,此线程是google中的第一个热门线程,我花了一段时间才找出问题所在,因此它可能对其他人有用:
我没有使用mysqli,仍然使用mysql\u connect我有一些简单的查询,但是一个查询导致同一个连接中的所有其他查询失败。
我使用mysql 5.7和php5.6,我有一个数据类型为“json”的表。显然,我的php版本没有识别mysql的返回值(php只是不知道如何处理json格式,因为内置的mysql模块太旧了(至少我认为是这样))
现在我把json字段类型改为text(现在我不需要原生的mysql json功能),一切正常

相关问题