はじめに
学校の作品展でPHPとMySQLを利用してSNSを作ったのでその時に使ったPHPでMySQLに接続する方法を(できる限り)分かりやすく紹介していこうと思います。
※PHPをぼんやりと理解した状態で書いているので間違った説明もあるかもしれません。ご了承ください(..)_
環境
PHP 7.3.4
MySQL 5.7.20
Apache Server Version 2.4
接続/Connect
MySQLには接続に必要な情報が四つります。
それぞれの説明についてはこの記事では割愛させていただきます。
- ユーザー名
- パスワード
- データベース名
- ホスト名
$db_username = "root";
//MySQLのユーザー名
$db_password = "root";
//MySQLのパスワード
$db_setting = "mysql:dbname=TestDB;host=localhost";
//接続するデータベースの名前とホスト名
$mysql_connecter = new PDO($db_setting,$db_username,$db_password);
接続はこれだけでできます。
SQLの実行
パターン1 実行結果が必要ないSQL
$sql = "select count(*) from test";
$stmt = $mysql_connecter->prepare($sql);
$stmt->execute();
executeするだけ特に難しいことはありません。
パターン2 実行結果が一行のSQL
$sql = "select count(*) from test";
$stmt = $mysql_connecter->prepare($sql);
$stmt->execute();
$result = $stmt->fetch();
echo $result["キー"];
SQLの実行結果が一行とかだと変数$resultにキーを指定するだけで取得可能
パターン3 実行結果が複数行のSQL
$sql = "select * from test";
$stmt = $mysql_connecter->prepare($sql);
$stmt->execute();
while($result = $stmt->fetch()){
echo $result["キー"];
}
複数行の場合はWhile文で回すかForeach文で回そう
個人的にはwhileのほうをよく使う気がします。
応用編 変数等でSQLの内容を変える場合
$sql = "select count(*) from test where id = :id";
$stmt = $mysql_connecter->prepare($sql);
$stmt->bindParam(":id",$id,PDO::PARAM_STR);
//要は上の$sqlの中の:idという部分を変数$idに置き換えてる
//PDO::PARAM_STRは文字列用。数値を扱いたい場合はPDO::PARAM_INTを使う。
$stmt->execute();
bindParamは使ってみるとわかるけどめっちゃ便利
文字列に置き換えるとダブルコーテーションとかも付けてくれるので
"~SQL文\"".$id."\"SQL文~"
みたいなクソコード書かなくてもいいんですよね(最初こんな感じの書いてました)
おわり
サンプルコードではSELECT文しか実行していませんがこのやり方でUpdateもDeleteもInsertも問題なく実行可能です。
ただ、ちょっとめんどくさい点としてどうもエラーが発生するSQLを実行してもPHPは問題なく動くんですよね。
このせいでデバッグに時間がかかったりします。最近はこれにめちゃくちゃ苦しめられました。
いいね押していってくれるとモチベの維持にもつながるのでよかったらお願いします。(..)_