MySQLi multi_query()好奇心

时间:2014-06-20 20:44:44

标签: php mysql sql mysqli

有人可以解释一下mysqli multi_query()的用途是什么吗?我不明白一个简单的MySQLi查询是否支持multimle语句,或者我被迫使用multi_query()来执行这样的查询:

   SET @row:=0;
   SELECT * FROM (
       select id,
       @row:=@row+1 AS `rank` FROM `users` WHERE `points` <= 63 ORDER BY `points` DESC
   ) AS number
   WHERE id = 1

我问这个因为运行$mysqli->query(ABOVE_STATEMENT)给我一个语法错误..即使在phpMyAdmin中运行相同的语句(使用mysqli扩展设置),它也会成功返回所需的数据。

3 个答案:

答案 0 :(得分:1)

您不必使用multi_query来执行此操作。 @row变量保留整个会话的值(即直到断开与MySQL的连接)。

您可以将SET语句和SELECT语句作为单独的查询提交。

$mysqli->query("SET @row:=0");
$mysqli->query("SELECT * ... ");

使用多查询没有充分的理由。 There are good reasons not to use multi-query.

如果有人告诉您使用多查询效率更高,因为&#34;一次往返比两次快,&#34;告诉他们给你一个证明它的基准。然后告诉他们你没有计划在一个PHP请求中运行一千个查询,因为这会对性能上的差异产生什么影响。

答案 1 :(得分:0)

multi_query是指您执行以下操作:

select * from somewhere;
select id from somewhere;
select names from somewhere;

查看http://www.w3schools.com/php/func_mysqli_multi_query.asp

注意你必须如何存储第一个结果,然后调用mysqli_next_result()来获取下一个结果。它将它们全部丢入一批并将它们全部还给你。

编辑:Marc B在评论中是正确的,您在技术上通过设置行来使用2个语句。在这种情况下,您使用多个查询。起初我没有看到。

答案 2 :(得分:0)

mysqli_query确实无法执行您的查询。

如果您想使用mysqli_multi_query,则可以执行以下操作

$mysqli->multi_query(ABOVE_STATEMENT);
$mysqli->next_result(); # skip the first query result
$rs = $mysqli->store_result();
while ($row = $rs->fetch_row()) {
  ...
}
相关问题