PHP入門(応用編)その2

#2 データを全件表示してみよう
try {
    $dbh = new PDO('mysql:host=localhost;dbname=blog_app','dbuser','testtest');
} catch (PDOException $e) {
    var_dump($e->getMessage());
    exit;
}
// 処理
$sql = "select * from users";
$stmt = $dbh->query($sql);
foreach ($stmt->fetchALL(PDO::FETCH_ASSOC) as $user) {
    var_dump($user['name']);
}
echo $dbh->query("select count(*) from users")->fetchColumn() . "records found";
$dbh = null;

// 処理 のところを考える

$sql = "select * from users";	// SQL文
$stmt = $dbh->query($sql);	// ステートメント
// $dbh の select * from users の結果を $users に連想配列で格納
foreach($stmt->fetchALL(PDO::FETCH_ASSOC) as $user){
    var_dump($user['name']);
}
// $dhb に query users テーブルから カラムのカウント数を取得する命令 + "records found"
echo $dbh->query("select count(*) from users")->fetchColumn() . "records found";

連想配列とは添え字付きの配列
添え字は$var['添え字'];

  • fetch_assoc カラム名によるキーで配列を返すのに対して
  • fetch_array 数値によるキーとカラム名によるキーの両方を返す
  • fetch_both arrayと同じ?


ちなみに処理のところで違う書き方も出来るみたいで

【書き方その1】
$sql = "select * from users";
$stmt = $dbh->query($sql);
foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $user) {
    var_dump($user['name']);
}
【書き方その2】
$sql = "select * from users";
foreach ($dbh->query($sql) as $user) {
    var_dump($user['name']);
}

これを見る限りfetchALL(PDO::FETCH_ASSOC)のところ丸まる要らないんじゃないかな。

foreach($stmt as $user){
    // 処理
}

これでも動いてくれたけど、何か違う処理をしたときにエラーを吐くのかな。