带有 SET 变量语句的 Mysqli 查询(在多个查询中)

Posted

技术标签:

【中文标题】带有 SET 变量语句的 Mysqli 查询(在多个查询中)【英文标题】:Mysqli query with a SET variable statment (ie multiple queries) 【发布时间】:2010-12-18 22:20:49 【问题描述】:

我想设置一个在 mysqli 查询中使用的变量。这不太行。在 mysqli 之前,我曾经设置查询调用。我玩弄 db->multi_query($sql) 没有运气。任何人都知道如何使这项工作包括 set 声明?

$sql = 'SET @rownum := 0;';
$sql .= 'SELECT @rownum :=@rownum + 1 AS Rank, User_Id, COUNT(User_ID) AS Block_Count
               FROM Block_Owners;

$stmt = $db->prepare($sql);
$stmt->bind_param('ii', $world, $userId);
// execute the query
$stmt->execute();

【问题讨论】:

您可以使用FROM BLOCK_OWNERS, (SELECT @rownum := 0) r;在单个查询中执行该操作 【参考方案1】:

在两个单独的查询中执行:

$db->query('SET @rownum := 0');
$sql = 'SELECT @rownum :=@rownum + 1 AS Rank, User_Id, COUNT(User_ID) AS Block_Count FROM Block_Owners'
$stmt = $db->prepare($sql);
$stmt->bind_param('ii', $world, $userId);
$stmt->execute();

但是请注意,您要运行的查询将始终返回单行(带有Rank = 1),因为您使用的是没有GROUP BY 的聚合函数。

【讨论】:

完美。不用担心 group by,实际查询更大,我只是简化了一点,使问题更容易理解。谢谢夸斯诺伊!

以上是关于带有 SET 变量语句的 Mysqli 查询(在多个查询中)的主要内容,如果未能解决你的问题,请参考以下文章

将 $mysqli 设置为 OOP 的全局变量

MySQLi:使用一个准备好的语句插入多行

带有 PDO 连接的 MySQL SET

带有通配符的 MySQLi 准备语句的奇怪结果(程序)

PHP:带有“select *”的Mysqli准备语句

在带有 CASE 语句的 UPDATE 上使用 LAG()