PHP-Getting:命令不同步;你可以';t现在运行此命令


PHP - Getting: Commands out of sync; you can't run this command now

我知道有数百个类似的问题,我试过了所有的问题,但没有什么真正对我有效。

我有一个函数,它正在调用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。我还能做什么?

非常感谢!

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

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;
}