一个CakePHP query()调用中有多个SQL语句


Multiple SQL statements in a single CakePHP query() call?

我正在尝试做一些复杂的SQL,这需要我在一个语句中在MySQL中设置几个变量,然后在下一个语句执行依赖于它们的查询。为此,我需要在一个$Model->query()调用中将这些命令发送到数据库。

两个语句调用看起来与此类似,粘贴自本教程:

set @num := 0, @type := '';
select type, variety, price,
  @num := if(@type = type, @num + 1, 1) as row_number,
  @type := type as dummy
from fruits force index(type)
group by type, price, variety
having row_number <= 2;

有趣的是,我找不到通过任何CakePHP模型方法(类似于mysqli::multi_query)执行多个分号分隔的SQL语句的方法。query()方法似乎只执行这个多语句调用中的第一条语句。

如何在同一个调用中执行这两个调用?

查看CakePHP API,当_execute函数运行时,它会在a上爆炸;并将每个作为单独的查询运行:

api.cakehp.org/2.4/source-class DboSource.html#__execute

我刚刚用两个查询做了一个测试,运行了查询函数,虽然它同时运行了两个查询,但它只返回第一个查询的数据。这就是为什么返回0行的原因(因为第一个查询是变量创建)。我确信这是Cake的默认值,因为它不知道在多个查询的情况下返回什么。

使用PDO->查询是不可能的。如果您使用的是PDP版本>=5.3,这里列出了一些解决方案(使用exec()):

https://stackoverflow.com/a/6461110/1935500