php - 如何使用数据库扩展 PDO 在 PHP 中编写多查询

标签 php mysql pdo

我想写这个MYSQL查询

SET @val := 0;
SELECT `my_table`.* FROM `my_table` HAVING (@val := @val + 1) > 0;

内部PHP使用数据库扩展的代码PDO !

我看过 mysqlimysqli_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/

相关文章:

mysql - 如何在Code-first中从数据库(mysql)导出表?

PHP stream_get_contents() 从数据库读取 LOB 时表现异常

php - 一般错误 : 1366 Incorrect string value: '\xF0\x9F\x8D\xB8 !...'

php - 为什么不能将 MYSQL 函数传递到准备好的 PDO 语句中?

php - 如何在 PHP 中创建抽象?

Mysql 在重复键更新时插入,如果键不存在则删除

php - 动态生成 Facebook Open Graph 元标签

mysql - 在 SQLite 中从 .sql 文件创建表

php - Android:使用php在服务器上上传图片

javascript - 使用 JavaScript 创建 Stripe Charge