PHP - 获取:命令不同步;你现在不能运行这个命令

Posted

技术标签:

【中文标题】PHP - 获取:命令不同步;你现在不能运行这个命令【英文标题】:PHP - Getting: Commands out of sync; you can't run this command now 【发布时间】:2016-04-11 17:12:08 【问题描述】:

我知道有数百个类似的问题,我已经尝试了所有方法,但没有一个对我真正有用。

我的 MariaDB 中有一个调用存储过程的函数。这是返回数组。

<?

class MyClass 

protected static $connection;

    public function connect()     
        // Try and connect to the database
        if(!isset(self::$connection)) 
            self::$connection = new mysqli(SERVERNAME,USERNAME,PASS,DBNAME);
        
        // If connection was not successful, handle the error
        if(self::$connection === false) 
            // Handle error - notify administrator, log to a file, show an error screen, etc.
            return false;
        
        return self::$connection;
    

    public function query($query) 
        // Connect to the database
        $connection = $this -> connect();

        // Query the database
        $result = $connection -> query($query);

        return $result;
    

    public function quote($value) 
        $connection = $this -> connect();
        return $connection -> real_escape_string($value);
    

public function CallStoredProc($query) 
    // Connect to the database
    $connection = $this -> connect();

    // Query the database
    $result = $connection -> query($query,MYSQLI_USE_RESULT);   //,

    if($result === false) 
        return false;
    

    while ($row = $result -> fetch_assoc()) 
        $rows[] = $row;
    

    $result->free();
    return $rows;
    

function StoreProcessed($Name,$Price)
    //escape
    $Name = $this->quote($Name);
    $Price= $this->quote($Price);

    $SQL = "INSERT INTO Result (`Name`,`Price`) VALUES ('$Name','$Price');";
    $result = $this->query($SQL);

    


    //the function I am using for processing: 
function Compare($ID) 

    $query = "CALL MyProcedure($ID);";
    $result =$this->CallStoredProc($query);

    /*After the array is returned I am looping trough each element of array 
    and storing this in DB with another function. */

    $Table = "<table>";
    foreach ($result as $key=>$val)
        
            $Name   =   $result[$key]["Name"];  
            $Price  =   $result[$key]["Price"];
            $this->StoreProcessed($Name,$Price);

            //This is where the Commands out of sync is returned

            $Table = $Table. "<tr>
                        <td>$Name</td>
                        <td>$Price</td>
                            </tr>";
                
            $Table = $Table. "</table>";
        return $Table;
    

    

我的 php 文件如下所示:

<?
$auto = new MyClass();
$table = $auto->Compare(14);

echo $table;
?>

我正在使用MYSQLI_USE_RESULT,数组填充后,我也在使用mysqli_free_result。我还应该做什么?

非常感谢!

【问题讨论】:

***.com/questions/614671/…的可能重复 @Daan ...理论上应该可以互换... @deceze 大多数情况下是的,但是:mariadb.com/kb/en/mariadb/mariadb-vs-mysql-compatibility 你试过MYSQL_STORE_RESULT 吗? 能否给出出错的代码? 【参考方案1】:

我找到了答案 here 。刚刚添加了这个功能:

function free_all_results(mysqli $dbCon)

    do 
        if ($res = $dbCon->store_result()) 
            $res->fetch_all(MYSQLI_ASSOC);
            $res->free();
        
     while ($dbCon->more_results() && $dbCon->next_result());

我在返回结果之前调用了它:

public function CallStoredProc($query) 
// Connect to the database
    $connection = $this -> connect();

    // Query the database
    $result = $connection -> query($query); //,
    mysqli_store_result($connection);

    if($result === false) 
        return false;
    

    while ($row = $result -> fetch_assoc()) 
        $rows[] = $row;
    

    $this->free_all_results($connection);
    return $rows;

【讨论】:

以上是关于PHP - 获取:命令不同步;你现在不能运行这个命令的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 错误 - 命令不同步;你现在不能运行这个命令

错误:命令不同步;你现在不能运行这个命令

python 命令不同步;你现在不能运行这个命令”

命令不同步..你现在不能在while循环中运行这个命令

Python“命令不同步;你现在不能运行这个命令“

我收到一个错误“命令不同步;当我使用mysqli_multi_query时,你现在无法运行此命令