php - MySQL存储过程导致 `Commands out of sync`

标签 php mysql

调用程序在 MySQL 终端中运行正常,但在 PHP 中,导致 命令不同步;你现在不能运行这个命令命令不同步;你现在不能运行这个命令

我的程序是

delimiter $$
create procedure getMostSimilar (IN vU_ID INT, IN voffset INT, IN vsize INT)
BEGIN
set @offset = voffset;
set @size = vsize;
set @uid = vU_ID;
prepare SimilarStmt from
"SELECT U_ID, getSimilarity(U_ID, ?) AS similar FROM Answer WHERE U_ID != ? GROUP BY U_ID ORDER BY similar DESC LIMIT ?, ?";
execute SimilarStmt using @uid, @uid, @offset, @size; 
deallocate prepare SimilarStmt;
END
$$

其中 getSimilarity 是一个函数。

在 PHP 中:

function getMostSimilar($U_ID, $offset, $size){
    $query = sprintf("CALL getMostSimilar(%s, %s, %s)",
                $U_ID, $offset, $size);
    $result = mysql_query($query);
    print mysql_error();
    if (!$result){
        return $query;
    }
    $ans = array();
    $len = 0;
    while($row = mysql_fetch_assoc($result)){
        $ans[$len] = $row;
        $len++;
    }
    return $ans;
}

我现在该怎么办?谢谢!

最佳答案

在调用返回结果集的存储过程时,似乎出现了一个令人讨厌的错误(或功能)。 IE。以不带 INTO 子句的 select 语句结尾的存储过程(参见下面的示例)。

mysqli 驱动程序(可能)返回 2 个结果集。第一个是从存储过程返回的结果,第二个是虚拟的空结果集。这就像发出了一个多查询命令。一个解决方案(不会中断通常的(例如 SELECT)查询)是在处理合法结果集(第一个)后使用这个虚拟结果集。

示例 PHP 代码

function do_query($con, $sql)
{
    $result = mysqli_query($con, $sql);
    if ($result === true) {
        return true;
    }
    while ($row = mysqli_fetch_assoc($result)) {
        // process rows
    }
    // Hack for procedures returning second dummy result set
    while (mysqli_more_results($con)) {
        mysqli_next_result($con);
        // echo "* DUMMY RS \n";
    }
}

示例存储过程:

CREATE PROCEDURE selectStaleHeaders()
NOT DETERMINISTIC
SELECT TT.*
FROM one_pretty_table AS TT
  LEFT JOIN another AS AN on TT.fk_id = AN.id
WHERE TT.id IS NULL;

关于php - MySQL存储过程导致 `Commands out of sync`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6583020/

相关文章:

php - 单独获取 Woocommerce 中每个购物车和订单商品的税率

php - 将 Zend Controller 与数字操作结合使用

java - 如何将 JavaFX ComboBox 中的选择转换为字符串

php - regEx 允许在数字之间插入字母

javascript - $_POST 没有从 jQuery.post 填充的表单中提取值

php - 如何将foreach循环生成的变量传递给PHP中的另一个页面

mysql - 选择包含在另一个表的集合中的行

PHP 分页问题

java - Grails save() 尝试在应该更新时创建新对象

mysql - SQL 组结果为一行