如何在PHP/MYSQL中执行两个mysql查询?

Pra*_*ant 29 php mysql loops

我有两个问题,如下:

SELECT SQL_CALC_FOUND_ROWS Id, Name FROM my_table WHERE Name LIKE '%prashant%' LIMIT 0, 10;
SELECT FOUND_ROWS();
Run Code Online (Sandbox Code Playgroud)

我想一次尝试执行这两个查询.

$result = mysql_query($query);
Run Code Online (Sandbox Code Playgroud)

但是请告诉我如何处理每个单独设置的表.实际上在ASP.NET中我们使用数据集来处理两个查询

ds.Tables[0];
ds.Tables[1]; .. etc
Run Code Online (Sandbox Code Playgroud)

如何使用PHP/MYSQL执行相同的操作?

Emi*_*l H 32

更新:显然可以通过传递标志mysql_connect().请参阅使用PHP在一个语句中执行多个SQL查询但是,任何当前读者都应该避免使用mysql_-class函数并且更喜欢PDO.

你不能使用PHP中的常规mysql-api来做到这一点.只需执行两个查询.第二个将是如此之快,以至于无关紧要.这是微优化的典型示例.别担心.

为了记录,可以使用mysqli和mysqli_multi_query -function完成.

  • 顺便说一句,如果你担心表现,你应该花时间试图摆脱LIKE'%prashant%'的声明.这可能是一个真正的性能问题.根据经验:大多数php应用程序的瓶颈根本不在php中,而是在数据库中.如果您想花时间优化您的应用程序,请花时间查看索引并解析您的查询. (8认同)
  • 我基本上担心性能,如果我们两次打到数据库,我认为会降低性能. (3认同)

Bil*_*win 8

正如其他人已经回答的那样,mysqli API可以使用msyqli_multi_query()函数执行多查询.

对于它的价值,PDO默认支持多查询,您可以迭代多个查询的多个结果集:

$stmt = $dbh->prepare("
    select sql_calc_found_rows * from foo limit 1 ; 
    select found_rows()");
$stmt->execute();
do {
  while ($row = $stmt->fetch()) {
    print_r($row);
  }
} while ($stmt->nextRowset());
Run Code Online (Sandbox Code Playgroud)

但是,出于安全原因,多查询被广泛认为是一个坏主意.如果您不小心如何构造查询字符串,您实际上可以获得经典"Little Bobby Tables"XKCD漫画中显示的SQL注入漏洞的确切类型.使用限制您进行单一查询的API时,这种情况无法实现.