LoginSignup
22
22

More than 5 years have passed since last update.

PHPでMysql操作するときのコードまとめ

Last updated at Posted at 2015-10-27

Webアプリ制作に欠かせないのがサーバーサイド言語とデータベースの連携です。
PHPのPDOオブジェクトを用いてMySQLに接続し、読み込み・書き込みをするときに使えるコードをまとめてみました。データベースのログイン情報などを適宜書き換えていただくだけで、ほぼコピペで動くと思います。
(コードサンプル中にtry-catchを書いていたのですが、それだと丸ごとコピペできなくなってしまうためtryの中身だけ書くようにしました。必要に応じてtry-catchで囲んでくださいということで…)

データベースに接続する

書き換える箇所:DB名、ユーザー名、パスワード

とりあえずこれで$pdoを作ってデータベースに接続します。これがないと他のコードは動きません。


$pdo = new PDO('mysql:host=localhost;dbname=DB名;charset=utf8', 'ユーザー名','パスワード');
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
//$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

※3行目については、手元の書籍にあったのを意味も分からず入れていたのですが、エミュレーションの無効化は無くてもいい(無い方がいい?)とコメントで教えていただきました。ありがとうございます。

テーブルから情報を取得(SELECT)

書き換える箇所:テーブル名

whileの内部は、テーブルの内容を配列$resultに入れる処理になっています。
whileの中の$rowにテーブル一行分のデータが入っていますので、煮るなり焼くなり好きにしてください。

$rowsの中にレコード達が入っています。
(fetchAllを知らなくて、whileとただのfetchで一行ずつ取り出すとかいうことをやっていました…場合によってはその方がいいこともあるかもしれないですが)

$sql = "SELECT * FROM テーブル名";
$stmh = $pdo->prepare($sql);
$stmh->execute();
$rows = $stmh->fetchAll();

テーブルの行を追加する(INSERT)

    $sql = "INSERT INTO テーブル名(カラム名1, カラム名2, …) VALUES(:カラム名1, :カラム名2, …)";
    $stmh = $pdo->prepare($sql);
    $stmh->bindValue(":カラム名1", 内容1);
    $stmh->bindValue(":カラム名2", 内容2);
    //以下略...
    $stmh->execute();

テーブルを更新する(UPDATE)

    $sql = "UPDATE テーブル名 SET カラム名 = :カラム名";
    $stmh = $pdo->prepare($sql);
    $stmh->bindValue(":カラム名", 内容);
    //以下略...
    $stmh->execute();

書き込み系(INSERT,UPDATE)について

トランザクション

複数の命令を実行する途中にエラーになったとき、データの整合性を守るために一連の命令を全部取り消すrollBackを使います。

try{
    $pdo->beginTransaction();
    /*
    処理の内容
    */
    $pdo->commit();
}catch(PDOException $Exception){
    $pdo->rollBack();
    echo "Updating error : ".$Exception->getMessage();
}

bindValue

こっちはINSERT,UPDATEに限りませんが
SQLにベタ書きしてもいい気がするのですが、ループで同じようなSQLを回すときはbindValue使った方がいいのかな?
あと型によって値を'で囲んだり囲まなかったりとかをうまいことやってくれる? でもそれには第3引数で型を指定しないといけないんだっけ…

SQL書くときの注意

SQLのテーブル名、カラム名が日本語だったりスペース入ってたり、予約語だったり(これは特に注意)すると囲み記号で囲ってやらないといけないわけですが、このとき使う記号は`(バッククォート)です!! '(シングルクォート)"(ダブルクォート)ではエラー吐かれます。逆にvalueの文字列を囲むときは「'」「"」なのだけども。
(個人的に、注文を入れるテーブルとかカラムに「order」と名付けたら予約語だったというのがすごくよくあります)

22
22
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
22