web-dev-qa-db-ja.com

PDOはデータベースからデータを取得します

私は最近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.');
}

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

7
chizijs

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

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

[〜#〜] update [〜#〜]execute()がありません)
また、 execute() メソッドを呼び出していないようです。afterステートメントを準備しますが、実際にデータをフェッチします:

_$getUsers = $DBH->prepare("SELECT * FROM users ORDER BY id ASC");
$getUsers->execute();
$users = $getUsers->fetchAll();
...
_
19
newfurniturey

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

$sql = $dbh->prepare("SELECT * FROM users ORDER BY id ASC");
$sql->execute();
while ($result = $sql->fetch(PDO::FETCH_ASSOC)) {
    echo $user['username']."<br/>";
}
5

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

_$getUsers = $DBH->prepare('SELECT * FROM users ORDER BY id ASC');
$getUsers->execute();
$users = $getUsers->fetchAll();
if ($users) {
    foreach ($users as $user) {
        echo $user['username']."<br/>";
    }
} else {
    trigger_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/>";
}
_
0
Dharman