MySQLi multi_query() 好奇心

标签: sql MySQL PHP
发布时间: 2017/4/9 23:11:36
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

能有人给我解释一下什么 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 扩展设置) 中运行相同的语句它成功返回所需的数据。

解决方法 1:

你不需要使用 multi_query 来做到这一点。@row变量保持它的值为您的整个会话 (即直到你从 MySQL 断开)。

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

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

没有好的理由使用多查询。有很好的理由不去使用多查询。

如果有人告诉你,它是更有效地使用多查询,因为"一个往返行程是比两个快",告诉他们向您展示一个基准测试,证明了这一点。然后告诉他们,你不打算跑一千查询在一个 PHP 请求中,因为那是什么才会为表现的差异有任何重大影响。

官方微信
官方QQ群
31647020