PHP&MySQLでデータ一覧を取り出して並べる方法はforeach文やwhile ($data = $stmt->fetch(PDO::FETCH_ASSOC))を使っていることが多いと思います。この場合、HTMLの方もliタグ、dt&ddタグでデザインもループしていることが多いです。
今日はそんな中で、ループをあまり必要としないレイアウトへデータを並べるためにはどうしたらよいのか、また、MySQLからそもそもデータを取り出すこととはどういういことなのかをまとめていきたいと思います。7月1日記事
目次
※データベースのパスワード情報はconfigファイルに入っているという仮定のもと進めていきます。 もしわからなければ、phpのconfigファイルをご覧ください。 コード
<?php //configファイル読み込み require('config.php'); //データベース接続へ組立 $dsn = 'mysql:dbname='.DB_NAME.';host='.DB_HOST.';port='.DB_PORT.''; $user = DB_USER; $password = DB_PASSWORD; //データベース接続&接続しなければエラー try{ $dbh = new PDO($dsn, $user, $password); }catch (PDOException $e){ print('Connection failed:'.$e->getMessage()); die(); } //テーブル名からすべてのカラム情報を取得する $sql = "SELECT * FROM table_name"; //からの配列を用意して、$rowとして取り出す $data = array(); foreach($dbh->query($sql) as $row){ array_push($data,$row); } //表示する var_dump($data); exit; ?>
これで、データベースから取り出したデータが配列として格納されていると思います。これをforeach文でループしまわしてくことでデータを並べたりできます。
しかし、レイアウトも複雑で、ループしても非効率という場合は、そのままそっくり多次元配列を並べていきましょう。
普通にHTML部にphpで編集したい領域があった場合にforeach等を使わず、多次元配列を埋めていくことでデータベースからの情報を出力していくことができます。
例:そのままデータベースから取り出す場合※idが1のデータを取り出していく場合
<何かのタグ><?php echo nl2br(htmlspecialchars($data[0]['column1'], ENT_QUOTES,"UTF-8")); ?></なにかのタグ終了>
例:データベースの文字コードがEUC-JPでUTF-8に戻したい場合※idが1のデータを取り出していく場合
<何かのタグ><?php echo nl2br(htmlspecialchars(mb_convert_encoding($data[0]['column1'], "UTF-8","EUC-JP"),ENT_QUOTES,"UTF-8")); ?></なにかのタグ終了>
などというように配列をそのまま並べていけばできます。
ただし、注意すべき点は
データベースのidが1から始まっているデータ一覧を取り出していく場合、配列は[0]から始まるので、1を引いた番号を配列番号として表現していくことが重要です。
以上のようにすれば複雑なレイアウトやループを使わない場合でもデータを並べていくことができます。
以上