我想写这个MYSQL查询
SET @val := 0;
SELECT `my_table`.* FROM `my_table` HAVING (@val := @val + 1) > 0;
内部PHP
使用数据库扩展的代码PDO
!
我看过 mysqli
有mysqli_multi_query()
但我不知道PDO
如何支持多查询?!
我试过了
<?PHP
// i'm connected to db
$sql = "SET @val := 0;";
$sql .= "SELECT `my_table`.* FROM `my_table` HAVING (@val := @val + 1) > 0;";
?>
<table>
<tr>
<th>id</th>
<th>name</th>
</tr>
<?PHP foreach($db->query($sql) as $row){ ?>
<tr>
<td><?php echo $row['id']; ?></td>
<td><?php echo $row['name']; ?></td>
</tr>
<?php } ?>
</table>
但是没有用!
Fatal error: Uncaught PDOException: SQLSTATE[HY000]: General error in \path\test.php:25 Stack trace: #0 {main} thrown in \path\test.php on line 25
第 25 行是:<?PHP foreach($db->query($sql) as $row){ ?>
看起来它没有通过查询!所以任何想法
最佳答案
查询工作正常。您的问题是 $db->query($sql)
返回了两个结果集:第一个用于 SET @val := 0
,第二个用于您的实际的 SELECT
查询。当您循环处理 $db->query()
的结果时,您将获得第一个结果集,即 SET @val := 0
的结果,这会导致崩溃.您需要做的是切换到下一个结果集,这将需要稍微重写您的代码。变化:
<?PHP foreach($db->query($sql) as $row){ ?>
到:
<?php
$result = $db->query($sql);
$result->nextRowset();
while ($row = $result->fetch()) {
?>
关于php - 如何使用数据库扩展 PDO 在 PHP 中编写多查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51905860/