読者です 読者をやめる 読者になる 読者になる

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','ユーザー名','パスワード');
と長々書いてもいいけど見やすさ的には分けたほうがよいのかなと

catchechoでエラーメッセージを出力

SQL分の実行

PDOでSQL文を実行するやり方には2種類queryprepareがある
構文ごとに使い方をかいてくよ

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と違い、prepareexecute()をやらないと実行されない

パラメーターの指定方法2つ
  • bindParam…変数をバインド
  • bindValue…値をバインド

bindParam

$stmt -> bindParam(':name', $name, PDO::PARAM_STR);

第二引数に変数を指定する
$_POST['name']なんかをそのまま入れて使うと便利

bindValue

$stmt -> bindValue(':name', 'siso', PDO::PARAM_STR);

第二引数に値を直接指定する
それだけ

どちらも第三引数には型を指定する
(しなくてもいいらしいけどしたほうがよさそう)

PDO::PARAM_STR 文字列型
PDO::PARAM_INT 数値型

他はこちらで

PHP: 定義済み定数 - Manual

取得したものの処理

feachでひとつずつ

while ($row = $stmt -> fetch(PDO::FETCH_ASSOC)) {
    $data['id'] = $row['id'];
    $data['name'] = $row['name'];
}

feachAllで一気に

$row = $stmt -> fetchAll(PDO::FETCH_ASSOC);

feachAllの方が使ってて圧倒的に便利だけど、データ量が多くなったり取ったデータによって色々と問題が起こるらしい
配列が想定してるものとは違うものが返ってきたり…

続きはいつかかく