slimでpimpleを使ってデータベースに接続
pimpleを使ってデータベースへの接続を行いデータベースからデータを取ってくるようにします。
データベースにテーブルとデータを追加
MYSQLのhogeデータベースにユーザ「hoge」パスワード「hogepass」で接続できるように設定してます。
create databases hoge; GRANT ALL PRIVILEGES ON hoge.* TO hoge@localhost IDENTIFIED BY 'hogepass'; flush privileges; mysql> use hoge mysql> create table user (name varchar(10)); mysql> insert into user (name)values('taka512');
dbに接続するクラスを作成
PDOを利用してMYSQLに接続するクラスです。
$ mkdir src/Taka512/Db $ vi src/Taka512/Db/Mysql.php <?php namespace Taka512\Db; class Mysql { protected static $conn = null; public static function connect($host, $database, $user, $password) { if (self::$conn == null) { try { self::$conn = new \PDO( sprintf('mysql:host=%s;dbname=%s;charset=utf8', $host, $database), $user, $password, array(\PDO::ATTR_EMULATE_PREPARES => false) ); } catch (\PDOException $e) { echo 'Connection failed: ' . $e->getMessage(); die; } } return self::$conn; } }
dbからデータを取得処理を作成
今までgetNameは固定文字列を返してましたがデータベースからデータを取得するように修正
$ vi src/Taka512/Services/NameService.php class NameService { ~省略~ public function getName() { $name = null; try { $stmt = $this->di['db_master']->query("SELECT name FROM user"); while($row = $stmt->fetch(\PDO::FETCH_ASSOC)){ $name = $row['name']; } } catch (\PDOException $e){ var_dump($e->getMessage()); die; } return $name;
index.phpの修正
pimpleにデータベースへの接続処理を追加します。
$ vi web/index.php ~省略~ $container = new Pimple(); $container['app'] = $app; $container['db_master'] = $container->share(function($c){ return \Taka512\Db\Mysql::connect( 'localhost'/*host*/, 'hoge'/*database*/, 'hoge'/*id*/, 'hogepass'/*pass*/); });
こんな感じでデータベースへの接続処理を追加できます。