私は最近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.');
}
ただし、ユーザーは表示されておらず、空白のページのみが表示されています。
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();
...
_
以下のこのコードは、あなたが求めていることを実行します:
$sql = $dbh->prepare("SELECT * FROM users ORDER BY id ASC");
$sql->execute();
while ($result = $sql->fetch(PDO::FETCH_ASSOC)) {
echo $user['username']."<br/>";
}
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/>";
}
_