この記事では、PHPプログラムでMySQLのDB(データベース)を操作する方法とソースコードについて紹介します。
【MySQLとは】特徴
MySQLとは、世界中で一番使われているデータベースです。
機能が豊富で処理速度も速く、オラクル社により開発されています。
– | 主な特徴 |
---|---|
1 | オープンソース |
2 | 非商用なら無料で利用可能(商用は有料) |
3 | 大規模データベース向き(Webサーバーでよく使われている) |
4 | マルチユーザ対応(複数同時利用が可能) |
5 | 主な使用例:Yahoo、Google、WordPressなど |
PHPでは、mysql関数を用いてMySQLのデータベースを操作できます。
※PHP7以降では、mysqli関数とmysqlクラスで操作可能
PHPの基礎文法については下記事で解説しています。
【phpMyAdmin】でデータベースの操作
データベースの作成
phpMyAdminを使うと、GUI操作でデータベースを作成できます。
MySQLのデータベースを構築する手順は以下の通りです。
①XAMPPをインストールします。
②「XAMPP Control Panel」を起動します。
③「Apache」の左にある「Start」ボタンをクリックします。
④「MySQL」の左にある「Start」ボタンをクリックします。
⑤「Apache」と「MySQL」の背景色が緑色になっていることを確認します。
⑥インターネットに接続できるブラウザ(Chromeなど)を起動します。
⑦ブラウザのアドレスバーに以下のURLを打ち込んでアクセスします。
無効なURLです
⑧下画像のページにアクセスしたら、「言語」「ユーザ名」「パスワード」を入力して「実行」をクリックします。
※言語を日本語にすると、日本語表示にできます
⑨上部メニューから「データベース」タブを選択します。
⑩作成したいデータベースの名前を入力し、「作成」ボタンをクリックします。
※下画像の例ではデータベース名をsarvantにしています
⑪これでデータベースを作成できました。
テーブルの作成
MySQLのデータベースを構築する手順は以下の通りです。
①データベースを作成します。
②phpMyAdminにログインし、「データベース」タブから作成したデータベース名を選択します。
※画像例はデータベースsarvantを選択
③作成したい「テーブル名」と「カラム数(列の数)」を入力します。
そして、「実行」ボタンをクリックします。
※画像例は5列のテーブル「artoria」を作成
④これでテーブルを作成できました。
尚、この後に表示される画面で、作成したテーブルのカラム(列)に関する詳細設定もできます。
【詳細設定の内容】
・名前 ・id ・データ型 ・長さ/値
CSVのロード
①CSVファイルのデータを格納する「データベース」と「テーブル」を作成しておきます。
②左側メニューから「データベース名」→「テーブル名」→「インポート」タブを選択していきます。
④読み込むCSVファイルを選択します。
⑤読み込みの設定をします。
・フォーマット(CSV)
・文字コード(UTFなど、CSVファイルの文字コードに合わせる)
・ファイルフォーマット
今回は下記のCSVファイルを試しに読み込んでみます。
artoria,saver,11221,15150,5 artoria alter,saver,10248,11589,4 artoria lily,savar,7726,10623,4 artoria lancer,lancer,10995,15606,5 artoria lancer alter,lancer,9968,11761,4 artoria swimwear,archer,11276,14553,5 artoria santa alter,rider,9258,11286,4 mystery heroine x,assassin,11761,12696,5 mystery heroine x alter,berserker,11113,14175,5
⑥「実行」ボタンを選択します。
今回は読み込み設定はデフォルトで行いました。
⑦「表示」タブを選択すると、読み込んだCSVファイルのデータがテーブルに格納されているか確認できます。
日本語のCSVファイルをインポートすると文字化けする場合があります。
その場合、以下の操作手順でインポートすることで解決できる場合があります。
①CSVファイルのデータを格納するデータベースとテーブルを作成しておきます。
②左側メニューから「データベース名」→「テーブル名」→「インポート」タブを選択していきます。
④読み込むCSVファイルを選択します。
※CSVファイルは改行コードをCR+LFに設定してUTF-8で保存
⑤読み込みの設定をします。(UTF-8の場合)
・フォーマット(CSV) ・文字コード(UTF-8) ・テーブルオプションで照合順序を全て「utf8_general_ci」に設定 ※テーブルオプションは「操作」タブから設定できます
⑥「実行」ボタンを選択します。
⑦「表示」タブを選択すると、読み込んだCSVファイルのデータがテーブルに格納されているか確認できます。
MySQLの管理者アカウント(root)には、フォルトでパスワードが設定されていません。
パスワード設定手順は以下の通りです。
①xampp-control.exeをダブルクリックして、XAMPPのコントロールパネルを開きます。
②「Apache」の左にある「Start」ボタンをクリックします。
③「MySQL」の左にある「Start」ボタンをクリックします。
④「Apache」と「MySQL」の背景色が緑色になっていることを確認します。
⑤「Shell」ボタンをクリックします。
以下のコマンドを入力します。
mysqladmin –user=ユーザ名 password ”パスワード”
(例)デフォルトの場合(ユーザ名:root、パスワード:無し→password)
mysqladmin –user=root password ”password”
⑥これでデータベースにパスワードが設定されます。
※例の場合だと、passwordというパスワードをrootユーザに対して設定
phpMyAdminの「特権」メニューやXAMPPのシェル等でrootユーザーのパスワードを設定した後、ログイン画面を開くと以下のエラーメッセージが表示される場合があります。
#1045 – Access denied for user ‘root’@’localhost’ (using password: NO) mysqli_real_connect(): (HY000/1045): Access denied for user ‘root’@’localhost’ (using password: NO) MySQL サーバに接続しようとしましたが拒否されました。config.inc.php のホスト、ユーザ名、パスワードが MySQL サーバの管理者から与えられた情報と一致するか確認してください。
これは、phpMyAdminの設定ファイル(config.inc.php)に、変更後のパスワードを設定していないことが原因です。
エラーの解決手順
①phpMyAdminのインストール先にある「config.inc.php」ファイルをテキストエディタで開きます。
②以下の箇所を編集します。
※変更後のパスワードを挿入します。
$cfg['Servers'][$i]['password'] = '変更後のパスワード';
③作業は以上です。
※エラーが解消されない場合は、ApacheやMySQLを再起動したりしてください。
【追記】
レンタルサーバーに設置したphpMyAdminの場合は、以下の箇所も編集する必要があります。
$cfg['Servers'][$i]['auth_type'] = ‘cookie’;
【PHP】MySQL DBの操作
DB接続
PHP7では、mysqli_connect関数でMySQLのデータベースに接続できます。
※PHP5では、mysql_connect関数を使います(引数は同じ)
【書式】
mysqli_connect([string server [, string username [, string password [, bool new_link [, int client_flags]]]]])
引数 | 内容 |
---|---|
username | ユーザー名 |
password | パスワード |
new_link | 同じ引数で2回関数を呼び出した際、接続でなくリンクIDを返す(この動作を変更して新規接続するようにする) |
client_flags | 圧縮プロトコルやSSL暗号化の設定 |
【返り値】
接続成功:MySQLリンクID
接続失敗:FALSE
サンプルプログラムのソースコードは下記の通りです。
サンプルプログラムの実行結果は下記の通りです。
(ユーザ名:root、パスワード:passwordのデータベースに接続)
DBに接続成功
DB切断
mysqli_close関数でMySQLのデータベースから切断できます。
※PHP5では、mysql_close関数を使います(引数は同じ)
【書式】
mysqli_close(link_identifier)
引数 | 内容 |
---|---|
link_identifier | 切断したいリンクID |
【返り値】
切断成功:MySQLリンクID
切断失敗:FALSE
サンプルプログラムのソースコードは下記の通りです。
(ユーザ名:root、パスワード:passwordのデータベースに接続→切断)
DB接続成功 DB切断成功
データの取得
mysqli_query関数でMySQL(データベース)上でクエリを実行できます。
今回はこれを用いて、データベースのテーブルからデータ(値)を取り出します。
※PHPからSELECT文を実行してやります
【書式】
mysqli_query(object database, string cmd);
引数 | 内容 |
---|---|
database | データベースオブジェクト |
cmd | クエリの内容(MySQLコマンド) |
■返り値
クエリの実行結果
【SELECT文】
SELECT カラム名 FROM テーブル名
※指定したテーブルのカラムにあるデータを抽出
※上記のサンプルプログラムでは、テーブル「artoria」のカラム「name」にあるデータを抽出
(ユーザ名:root、パスワード:password、データベース:sarvantに接続→値取得→切断)
DB接続成功 artoria artoria alter artoria lily artoria lancer artoria lancer alter artoria swimwear artoria santa alter mystery heroine x mystery heroine x alter DB切断成功
データベースのテーブルげデータ(値)を追加します。
※PHPからINSERT文を実行してやります
【書式】
mysqli_query(object database, string cmd)
;
引数 | 内容 |
---|---|
database | データベースオブジェクト |
cmd | クエリの内容(MySQLコマンド) |
■返り値
クエリの実行結果
【INSERT文】
INSERT INTO テーブル名(カラム名) VALUES(データ)
※指定したテーブルのカラムへデータを追加
※上記のサンプルプログラムでは、テーブル「artoria」のカラム「name」にデータ「nero claudius」を追加
(ユーザ名:root、パスワード:password、データベース:sarvantに接続→データ追加→データ取得・表示→切断)
DB接続成功 artoria artoria alter artoria lily artoria lancer artoria lancer alter artoria swimwear artoria santa alter mystery heroine x mystery heroine x alter nero claudius DB切断成功
※nero claudiusが追加されています
データの更新
データベースのテーブルにあるデータ(値)を更新します。
※PHPからUPDATE文を実行してやります
【書式】
mysqli_query(object database, string cmd);
引数 | 内容 |
---|---|
database | データベースオブジェクト |
cmd | クエリの内容(MySQLコマンド) |
■返り値
クエリの実行結果
【UPDATE文】
UPDATE テーブル名 SET カラム名 = 更新後の値 where name = 更新前の値;
※指定したテーブルのカラムにあるデータを更新
※上記のサンプルプログラムでは、テーブル「artoria」のカラム「name」にあるデータ「nero claudius」を「nero bride」に変更
(ユーザ名:root、パスワード:password、データベース:sarvantに接続→データ追加→データ取得・表示→切断)
DB接続成功 artoria artoria alter artoria lily artoria lancer artoria lancer alter artoria swimwear artoria santa alter mystery heroine x mystery heroine x alter nero bride DB切断成功
※nero claudiusがnero brideに変更されています
データの削除
データベースのテーブルにあるデータ(値)を削除します。
※PHPからDELETE文を実行してやります
【書式】
mysqli_query(object database, string cmd);
引数 | 内容 |
---|---|
database | データベースオブジェクト |
cmd | クエリの内容(MySQLコマンド) |
■返り値
クエリの実行結果
【DELETE文】
DELETE FROM テーブル名 WHERE カラム名 = 削除するデータ;
※指定したテーブルのカラムにあるデータを削除
※上記のサンプルプログラムでは、テーブル「artoria」のカラム「name」にあるデータ「nero claudius」を削除
DBに登録したデータの日本語が文字化けした場合、次の手順で文字コードの設定を見直します。
– | 操作 |
---|---|
1 | PHPで文字コードをUTF-8に設定 |
2 | Apacheで文字コードをUTF-8に設定 |
3 | headerでUTF-8を指定 header(‘Content-Type: text/html; charset=UTF-8’) |
4 | PDOでUTF-8を指定 $db = new PDO(‘mysql:host=localhost;dbname=hogehoge;charset=utf8’, $USER, $PASSWORD); |
コメント