PDO使ってみた
PDO使ってみました
PDO・・・PHP Data Objectsの略
データベースとのやりとりをするやつ
例えばデータベースの種類を変えないといけないって時なんかに書き方を変えずに使えちゃうすごいやつ
データベースに接続
define('DB_NAME' , 'データベース名'); define('DB_HOST' , 'ホスト名'); define('DB_USER' , 'ユーザー名'); define('DB_PASS' , 'パスワード'); $dsn = 'mysql:dbname=' . DB_NAME . ';host=' . DB_HOST . ';charset=utf8'; try{ $pdo = new PDO($dsn, DB_USER, DB_PASS); } catch (PDOException $e){ echo $e -> getMessage(); }
まずは定数に接続に必要な情報を入れる
$dsn
の部分は
new PDO('mysql:dbname=' . DB_NAME . ';host=' . DB_HOST . ';charset=utf8','ユーザー名','パスワード');
と長々書いてもいいけど見やすさ的には分けたほうがよいのかなと
catch
のecho
でエラーメッセージを出力
SQL分の実行
PDOでSQL文を実行するやり方には2種類query
とprepare
がある
構文ごとに使い方をかいてくよ
SQL文自体については説明しないよ〜〜〜〜〜〜〜〜〜〜
select_データ取得
query
$stmt = $pdo -> query('select * from user where name = 'siso' ');
SQL文をそのまま実行する
select * from user
とか、条件が変わらないデータとかの時につかうとよい
正直自分はあんま使わない☺️
prepare
$name = 'siso'; $stmt = $pdo -> prepare('select * from user where name = :name '); $stmt -> bindParam(':name', $name, PDO::PARAM_STR); $stmt -> execute();
:name
とかパラメーターを使って実行する
めちゃくちゃいい
query
と違い、prepare
はexecute()
をやらないと実行されない
パラメーターの指定方法2つ
bindParam
$stmt -> bindParam(':name', $name, PDO::PARAM_STR);
第二引数に変数を指定する
$_POST['name']
なんかをそのまま入れて使うと便利
bindValue
$stmt -> bindValue(':name', 'siso', PDO::PARAM_STR);
第二引数に値を直接指定する
それだけ
どちらも第三引数には型を指定する
(しなくてもいいらしいけどしたほうがよさそう)
型 | |
---|---|
PDO::PARAM_STR | 文字列型 |
PDO::PARAM_INT | 数値型 |
他はこちらで
取得したものの処理
feachでひとつずつ
while ($row = $stmt -> fetch(PDO::FETCH_ASSOC)) { $data['id'] = $row['id']; $data['name'] = $row['name']; }
feachAllで一気に
$row = $stmt -> fetchAll(PDO::FETCH_ASSOC);
feachAllの方が使ってて圧倒的に便利だけど、データ量が多くなったり取ったデータによって色々と問題が起こるらしい
配列が想定してるものとは違うものが返ってきたり…
続きはいつかかく