11

私は最近PDOを使い始めましたが、以前はMySQLだけを使用していました。今、私はデータベースからすべてのデータを取得しようとしています。

$getUsers = $DBH->prepare("SELECT * FROM users ORDER BY id ASC");
$getUsers->fetchAll();
if(count($getUsers) > 0){
    while($user = $getUsers->fetch()){
        echo $user['username']."<br/>";
    }
}else{
    error('No users.');
}

ただし、ユーザーは表示されておらず、空白のページのみが表示されています。

4

3 に答える 3

22

このPDOメソッドfetchAll()は配列/結果セットを返します。これを変数に割り当ててから、その変数を使用/反復する必要があります。

$users = $getUsers->fetchAll();
foreach ($users as $user) {
    echo $user['username'] . '<br />';
}

UPDATE(missing execute())また、ステートメントを準備した、実際にデータをフェッチするに発生する必要のあるメソッドを
呼び出していないようです。execute()

$getUsers = $DBH->prepare("SELECT * FROM users ORDER BY id ASC");
$getUsers->execute();
$users = $getUsers->fetchAll();
...
于 2012-11-01T18:53:07.897 に答える
7

以下のこのコードは、あなたが求めていることを実行します:

$sql = $dbh->prepare("SELECT * FROM users ORDER BY id ASC");
$sql->execute();
while ($result = $sql->fetch(PDO::FETCH_ASSOC)) {
    echo $result['username']."<br/>";
}
于 2016-07-06T06:09:31.037 に答える
4

execute()コードにafterへの呼び出しがありませんprepare()。プリペアドステートメントが実行された後、を使用してレコードの配列を取得できますfetchAll()

$getUsers = $DBH->prepare('SELECT * FROM users ORDER BY id ASC');
$getUsers->execute();
$users = $getUsers->fetchAll();

// Then in your presentation logic you can use the following code to display the data:
if ($users) {
    foreach ($users as $user) {
        echo $user['username']."<br/>";
    }
} else {
    // Whatever your requirement is to handle the no user case, do it here.
    echo 'Error: No users.';
}

ただし、この例では、変数データをクエリに渡さず、1回だけ実行するため、プリペアドステートメントの目的が無効になります。SQLに変数が必要な場合は、プリペアドステートメントを使用する必要があります。次に例を示します。

$getUsers = $DBH->prepare('SELECT * FROM users WHERE id=?');
$getUsers->execute([
    $_GET['user_id']
]);
$user = $getUsers->fetch();     // get single user by unique id

変数がない場合は、単にquery()メソッドを使用できます。

$users = $DBH->query('SELECT * FROM users ORDER BY id ASC')->fetchAll();

すべてのレコードを一度にフェッチする必要がない場合は、次のコマンドを使用してステートメントをループするだけですforeach

$getUsers = $DBH->prepare('SELECT * FROM users WHERE username LIKE ? ORDER BY id ASC');
$getUsers->execute([
    '%' . $_GET['search'] . '%'     // search for username with wildcards
]);

foreach ($getUsers as $user) {
    echo $user['username']."<br/>";
}
于 2019-07-26T17:11:10.613 に答える