繁体   English   中英

PHP - PDO - 如何仅使用一个查询获取多行?

[英]PHP - PDO - How to fetch multiple rows with only one query?

首先,我是 PDO 的新手。 我正在做一个小项目来提高自己。

我正在使用这样的代码从我的数据库中获取单行:

    $sql = "SELECT * FROM users WHERE ID = 1";
    $sql_prepare = $db -> prepare($sql);
    $result = $db -> query($sql);
    $user = $result -> fetch(PDO::FETCH_ASSOC);

并像这样回显该行的任何结果:

    echo $user['ID'];
    echo $user['Name'];

我需要只使用一个查询从我的数据库中获取多行。 我不想为我需要的每一行一遍又一遍地查询。

我想到的第一件事就是尝试这个:

    $sql = "SELECT * FROM users WHERE ID = 1 AND ID = 4 AND ID = 17";
    $sql_prepare = $db -> prepare($sql);
    $result = $db -> query($sql);
    $user = $result -> fetch(PDO::FETCH_ASSOC);

但它没有按预期工作。 我研究了几个小时的编码论坛,但所有答案都是关于使用 fetchAll 方法,然后使用 foreach 循环输出结果。 我不想通过加载整个数据库表来使代码紧张。 我只想使用一个查询从我的数据库加载特定行。

所以我的问题是:

如何在不使用 fetchAll 方法且仅使用一个查询的情况下从我的数据库中获取多个特定行?

提前感谢您的回答和时间。

对不起,如果之前问过这个问题。

您需要将查询修改为

SELECT * FROM users WHERE ID IN(1,4,17);

并使用fetchAll()方法返回所有记录而不是一个。

如果你不想使用fetchAll(); 那么你需要在循环中使用 fetch() 并且你仍然需要修改查询。

while ($user = $result->fetch(PDO::FETCH_ASSOC)) {
  print_r($user);
}

注意:您使用不带参数的准备好的语句。

你应该像这样使用它

$sth = $dbh->prepare('SELECT * FROM users WHERE ID IN(?,?,?)');
    if($sth->execute([1,2,3])) {
        //1,2,3 is the value to be send
        if($sth->rowCount() > 0) {
            while($result = $sth->fetchObject()) {
               print_r($result);
            }
        } else {
            echo 'there are no result';
        }
    } else {
        echo 'there error in the query';
}

有很多方法可以做这件事,但这只是基础准备 -> 执行 -> 获取数据

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM