有人可以解释一下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扩展设置),它也会成功返回所需的数据。
答案 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()) {
...
}