Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
13
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

PHPフレームワーク「Slim」でMySQLを利用してみる

概要

前回の記事に引き続いてSlimを触っていきます。

今回はMySQLに接続してDBからデータを取得していきます。

設定

まずは公式サイトのドキュメントを参考にし、DSN情報をsetting.phpに記載します。

src/setting.php
// db接続情報
'db' => [
    'host'   => 'localhost',
    'user'   => 'ユーザ名',
    'pass'   => 'パスワード',
    'dbname' => 'DB名',
]

次に、DBオブジェクト生成を行います。
今回はチュートリアルと同様にPDOを利用します。

src/dependencies.php
// DB接続
$container['db'] = function ($c) {
    $dsn = 'mysql:host=%s;dbname=%s;charset=utf8mb4';
    $db  = $c['settings']['db'];
    $pdo = new PDO(sprintf($dsn, $db['host'], $db['dbname']),
        $db['user'], $db['pass']);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
    return $pdo;
};

これで準備は整いました。
それでは実際にDBからデータを取得していきます。

データ取得

今回はブログの件名と登録内容を格納したpostsテーブルからデータを取得していきます。

先程生成したDBオブジェクトは、routes.php内で$this->dbとして利用することが出来ます。

src/routes.php
// ブログ登録内容取得
$app->get('/blog', function ($request, $response, $args) {

    $sql = 'SELECT * FROM posts';
    $query = $this->db->prepare($sql);
    $query->execute();

    $data = $query->fetchAll(PDO::FETCH_ASSOC);

    var_dump($data);
});

実際にブラウザからアクセスすると下記のようにデータが取得できていました。

array 
  0 => 
    array
      'id' => string '1'
      'title' => string '???'
      'body' => string '???lol'
      'created' => string '2016-03-03 01:49:06'
      'modify' => string '2016-03-11 02:25:00'

なぜかマルチバイトが文字化けしていますが、データ取得自体は出来たので今回はここまでとします。

追記

マルチバイトの文字化けはコメントにてご指摘頂いたようにcharsetの指定漏れでした。
ちゃんとcharsetを指定することで文字化けは解消されました。

array 
  0 => 
    array
      'id' => string '1'
      'title' => string 'テスト'
      'body' => string 'テストlol'
      'created' => string '2016-03-03 01:49:06'
      'modify' => string '2016-03-11 02:25:00'
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
13
Help us understand the problem. What are the problem?