【问题标题】:Multiple SQL statements in a single CakePHP query() call?单个 CakePHP query() 调用中的多个 SQL 语句?
【发布时间】:2014-07-24 03:00:20
【问题描述】:

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

双语句调用看起来与此类似,从this tutorial 粘贴:

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 函数运行时,它会在 ;并将每个查询作为单独的查询运行:api.cakephp.org/2.4/source-class-DboSource.html#__execute。也许你应该首先简化你的例子来确定它是否真的是一个蛋糕问题,或者别的什么。
  • 是的,我确定我的语法是正确的。我看到这两条语句的 SQL 正在执行,但 CakePHP 查询调试输出报告它返回 0 行。当我直接在 MySQL 控制台中运行相同的双语句 SQL 时,它会返回数百行。
  • 我刚刚对通过查询函数运行的两个查询进行了测试,虽然它确实运行了两个查询,但它只返回第一个查询的数据。这就是为什么您会返回 0 行(因为第一个查询是创建变量)。我确定这是 Cake 默认设置,因为它不知道在多个查询的情况下要返回什么。您也许可以将您的查询合二为一,但我不确定如何。或许您可以针对该问题提出一个单独的问题。
  • 只看你链接的教程,你确定你不能用一个 UNION 查询来实现你需要的东西,或者运行一个更广泛的查询,然后从 Cake 中过滤掉你想要的结果?
  • can't do that with php by default。你最好使用存储过程。

标签: php mysql cakephp cakephp-2.0


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2012-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-31
      相关资源
      最近更新 更多