【发布时间】:2014-12-04 15:30:06
【问题描述】:
我正在尝试将 0-100 分数转换为 #1、#2、#3、...#n 基准排名。 为了做到这一点,我计划了以下查询:
$q= "SELECT @rownum:=0;";
$q.=" INSERT INTO ranks (`uid`, `rank`, `sample_date`) (SELECT user_id, @rownum:=@rownum+1, NOW() FROM `scores` WHERE 1 ORDER BY score DESC)";
这在 SQL 控制台 (phpmyadmin) 中运行良好,但是当尝试通过 PHP 的 MySQLi 运行时,使用他们的 multi_query 我运行以下错误:
Commands out of sync; you can't run this command now
我的 multi_query 包装器:(在扩展 mysqli 的类中)
public function multiQuery($query) {
if (@parent::multi_query($query)) {
$i = 0;
do {
$i++;
} while (@parent::next_result());
}
if (!$result) {
printf("MySQLi error:<br><b>%s</b><br>%s <br>", $this->error, $query);
}
return $result;
}
为什么会出现这个错误?
【问题讨论】:
-
@CEP 谢谢,但信息量不是很大(没有帮助我理解)
-
我不是专家,但看来您必须先使用
use_result()的结果,然后才能使用next_result()继续下一个结果。这个例子应该会有所帮助:php.net/manual/en/… -
您想用
do-while循环完成什么?您正在检查if (!$result),但您之前没有为其分配任何内容。