【问题标题】:How to execute multiple select queries in one statement?如何在一个语句中执行多个选择查询?
【发布时间】:2014-07-24 05:42:05
【问题描述】:

我正在尝试使用 php 在单个查询中在 mysql 中执行许多选择语句。

select * from clients;
select * from users;
select * from products;

Mysql workbench 只返回最后一条 sql 语句的记录。 我的 PHP 代码是

$query = "select * from table1;select * from table2;" 
$result = $pdo->prepare($query);
$result->execute();
$rows = $result->fetchAll(PDO::FETCH_NAMED);

我得到了错误

SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other 
unbuffered queries are active.  Consider using PDOStatement::fetchAll().     
Alternatively, if your code is only ever going to run against mysql, 
you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY    
attribute 

是否可以像 MSSQL 一样一次执行多个选择查询并获得所有结果?

目前我唯一的解决方法是循环执行单个 sql 并动态构建响应。

【问题讨论】:

  • 坚持你的“解决方法”,这实际上是常规的做事方式
  • 上述url中的方法似乎对用户输入有SQL注入问题。这很适合进一步调查。也许,手动方法更适合此目的

标签: php mysql select pdo


【解决方案1】:

试试mysqli::multi_query
http://www.php.net/manual/en/mysqli.multi-query.php

我用它来上传 pre-generetad 转储文件,所以它只有 CREATE TABLE 和 INSERT 语句,但手册说 SELECT 工作正常两个。

而且我确信 PDO 扩展具有相同的方法。

【讨论】:

  • .. 需要注意的是,如果查询是使用外部数据动态构建的,那么 multi_query 代表一个极端的安全漏洞。 xkcd.com/327
猜你喜欢
  • 2012-08-15
  • 1970-01-01
  • 2022-01-09
  • 2013-03-01
  • 1970-01-01
  • 2014-03-03
  • 1970-01-01
  • 1970-01-01
  • 2016-07-10
相关资源
最近更新 更多