レンタルサーバーではホームページの作成などができるが、MySQLを使うことによって、ファイルのアップロードをしなくてもデータを更新できるので便利である。その仕組みをざっと解説する。解説のために使用するサーバーはxserverを利用する。エディタにはVisual Studio Codeを使用している。それぞれに環境は合わせてほしい。
MySQLを使わない場合は、サーバーユーザーはファイルをサーバーにアップロードし、閲覧者にそのページを表示する。MySQLを使う場合は、閲覧者はそれに加えてデータを変更を行うこともできる。これにはPHPファイルを用意し、そこからMySQLにアクセスし、SQL文を送って更新する。再度、ページを開いたときにはそのデータが反映されていることになる。
このファイルはtest.htmlというファイル名で作成した。他から参照されることはないので、名前はなんでもよい。レンタルサーバーで開くファイルになるのでファイル名がアドレスに使用される。文字コードはUTF-8で保存する。
<!doctype html><html lang="ja"> <head> <meta charset="utf-8"> <title>トップ</title> </head> <body><form name="nameForm" id="idFormSqlUpdate" action=""> <input type="button" value="更新する" onclick="SqlUpdate()"></form><div id="idResult"></div><script>function SqlUpdate(){ var req = new XMLHttpRequest(); req.onreadystatechange = function(){ if (req.readyState == 4 && req.status == 200) { document.getElementById("idResult").innerHTML = req.responseText; } } req.open("get", "test.php", true); req.send(null);}</script> </body></html>「更新する」というボタン1つだけ表示する。このボタンを押すと、MySQLが更新されるようにする。"test.php"というサーバー上のファイルにアクセスし、その応答テキストを表示する。
PHPファイルのファイル名はHTMLの呼び出すファイル名に合わせておく。
※このコードは以前の書き方である。現在ではPDOを用いた記述方法がある。
<?php$host = "mysqlxxxx.xserver.jp";$sqluser = "cpage_xxxxxxxx";$password = "xxxxxxxx";$dbname = "cpage_a";$mysqli = new mysqli($host, $sqluser, $password, $dbname);if (mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit();}if ($result = $mysqli->query("SELECT num FROM test")) { $row = mysqli_fetch_assoc($result); echo "更新前の値:" . $row["num"] . "<br>"; $result->close();} else exit();$num = intval($row["num"]);$sqlUpdate = "UPDATE test SET num = " . ($num+1) . " WHERE num = " . $num;if ($result = $mysqli->query($sqlUpdate)) {} else exit();if ($result = $mysqli->query("SELECT num FROM test")) { $row = mysqli_fetch_assoc($result); echo "更新後の値:" . $row["num"]; $result->close();}$hostはMySQLのホスト名である。IPアドレスを指定することもできる。$sqluserはMySQLへのアクセス権を付与されたユーザー名である。$passwordはユーザーのパスワードである。$dbnameはデータベース名である。これらについては、後ほど設定方法を解説する。テーブル名も出てくるため、紛らわしくなるので区別に気をつけてほしい。
データベース内のtestテーブルにアクセスしている。SQLはSELECT文、UPDATE文、SELECT文の順で3回実行している。1回目のSELECT文で現在の値を取得し、UPDATE文でその値を1増やしている。2回目のSELECT文で更新後の値を再度取得している。
test.htmlと合わせて、1度アップロードしよう。ファイルマネージャでアップロードしてもよいし、FTPを使うならホームページビルダーのツールや、フリーソフトのFFFTPなどが使用できる。$sqluserなどの個別設定は変更したら再度アップロードしよう。
xserverではサーバーパネルにログインして、MySQLの設定を行う。[MySQL設定]をクリックしてページを開く。[MySQL一覧]ページではホスト名が表示されている。test.phpの$hostはこのホスト名になる。MySQLを使うには、ユーザーを追加する必要がある。[MySQL設定]の[MySQLユーザ追加]ページを開く。ここでIDとパスワードを入力し、[追加する]ボタンをクリックするとユーザーが追加される。
test.phpの$sqluserは[MySQLユーザID]になり、$passwordは[パスワード]になる。
次に、データベースを追加する。[MySQL追加]ページを開き、データベース名を入力し、[確認画面へ進む]をクリックし、つぎの画面で[追加する]をクリックする。test.phpの$dbnameがこのデータベース名になる。
最後に、データベースにアクセス権を設定する。[MySQL一覧]でデータベースの[アクセス権未所有ユーザ]からユーザ名を選択し、[追加する]をクリックする。これでユーザ名とデータベースを関連付けることができた。
test.phpでは、SELECT文及びUPDATE文ではtestテーブルにアクセスしていた。テーブルを作成する方法はいろいろあるが、サーバーパネルからphpMyAdminを使ってみる。phpMyAdminをクリックし、[MySQLユーザ追加]ページで設定したユーザ名とパスワードを入力するとログオンできる。左側のツリーで私の環境では[cpage]>[cpage_a]と進む。右下[テーブルの作成]に作成するテーブルのtestを入力し、カラムは1にして[実行]をクリックする。
テーブルは名前にnumにして、インデックスはPRIMARYにして、[保存する]ボタンをクリックする。
[挿入]タブで値0のデータを1つだけ追加し、[実行]をクリックする。これでMySQLの準備完了である。
[表示]タブでnumに0があることを確認できる。[編集]をクリックすれば値を変更できる。
因みにだが、phpMyAdminのユーザー切り替え手順は、左のExitマーク([ログアウト]ツールチップが出る)をクリックし、ログインポップアップで[キャンセル]をクリックし、再度サーバーパネルのphpMyAdminをクリックしユーザ名とパスワードを入力し、ログインをクリックする。MySQLユーザのパスワード変更時は、パスワードを再入力するだけでよい。
test.phpの各設定項目$host~$dbnameを入力し、アップロードが済んだら、早速実行してみよう。レンタルサーバーのアップロードしたtest.htmlで[更新する]ボタンをクリックする。ボタンを押すたびに値が増えていくことが確認できる。簡単なつくりのため更新しないと値が表示されないが、ページをリロードしても値が引き継がれていることが確認できる。
レンタルサーバーがSSH(Secure Shell)に対応していれば、クライアント(端末)からテーブルの操作を行うこともできる。クライアントにはTera Termを使用する。xserverではMySQLのユーザ設定とデータベース設定はできないので、サーバーパネルでデータベースとユーザの設定を行う。
xserverの場合、レンタルサーバーのマニュアルに従いSSHを有効にし、秘密鍵をダウンロードしておく。Tera Termを起動し、最初の画面でホストやTCPポートの入力を行う。TCPポートはデフォルトでは22であるが、xserverでは10022になっている。
次にユーザ名、パスワードを入力し、ダウンロードした秘密鍵を開く。秘密鍵は拡張子がkeyになっているので[ファイルの選択]ダイアログでは「すべてのファイル(*.*)」フィルタにしよう。[OK]をクリックすると、サーバーと接続する。
接続が成功したら、MySQLのユーザー名でMySQLにログインする。--hostはホスト名、-uはユーザ名、-pはパスワードである。
「show databases;」でデータベースを一覧表示する。「use cpage_a;」で現在のデータベースcpage_aを選択する。選択した状態で、「show tables;」とするとテーブルを一覧表示する。「select * from test;」でテーブルの内容を表示できる。
numは現在3になっている。「update test set num = 100 where num = 3;」とすれば、numが100に変わる。「select * from test;」で確認できる。
phpMyAdminと、ウェブページ上でも変更は反映されている。
phpmyadminで1つのカラムを全て同じ値にする例を示す。
UPDATE agri SET enable = 0次に2つのテーブルから同一キーのレコードについて、カラムをコピーする例を示す。
UPDATE agri, agribu SET agri.enable=agribu.enable WHERE agri.id = agribu.idFROMは使えないようなので注意。代わりにUPDATE~SETの間にテーブルを複数記述する。