ウェブ、ショウジン

PHPからMySQLに接続する

2009-1-17
Category
MySQL PHP

抽象化レイヤ(PEAR::DBとかADOdbとかMDB2とか)を使わずに、PHPにおけるMySQL操作の専用関数を使用してMySQLを操作してみる。

DBへの権限を低めに設定したユーザを追加して、このユーザでもってやってみる。

ユーザを追加するMySQLコマンド

mysql> use phplesson
Database changed
mysql> GRANT SELECT, INSERT, UPDATE, DELETE ON *.* TO dbuser@localhost IDENTIFIED BY 'hoge';
Query OK, 0 rows affected (0.00 sec)

localhostから接続するユーザ「dbuser」に対して、すべてのデータベースのSELECT、INSERT、UPDATE、DELETEの実行を許可するという意味。’hoge’のところはこのdbuserがログインするときのパスワード。

逆に、すべての権限を与える場合は「GRANT ALL ON 〜」。

MySQLに接続

PHPにはPostgreSQLやMySQL、OracleなどのRDBMSに対応した専用関数が用意されている。ここでは、MySQLに接続するためのmysql_connect関数を使用する。

<?php
// MySQLへ接続
$mysql_con = mysql_connect ("localhost","dbuser","hoge");

// falseが返されたら失敗を表示、でなければ成功を表示
if ($mysql_con == false) {
    print "接続に失敗しました。";
} else {
    print "接続に成功しました!";
}
?>

データベースを選択

ここでは練習用に作成したphplessonを選択。

<?php
// MySQLへ接続
$mysql_con = mysql_connect ("localhost","dbuser","hoge");
if ($mysql_con == false) {
    print "接続に失敗しました。";
    exit;
}

// MySQLのデータベースを選択
$select_db = mysql_select_db ("phplesson",$mysql_con);
if ($select_db == false) {
    print "データベースphplessonの選択に失敗しました。";
} else {
    print "データベースphplessonを選択に成功。";
}
?>

INSERT(データの挿入)

<?php
// MySQLへ接続
$mysql_con = mysql_connect ("localhost", "dbuser", "hoge");
if ($mysql_con == false) {
    print "MySQLへの接続失敗。";
} else {
    print "MySQLへ接続しました。";
}

// データベースphplessonを選択する
$select_db = mysql_select_db ("phplesson", $mysql_con);
if ($select_db == false) {
    print "データベースphplessonの選択に失敗したよ。";
} else {
    print "データベースphplessonを選択しました。";
}

// address_tテーブルにデータを挿入するINSERT文を書いて$sqlに格納
$sql = "INSERT INTO address_t VALUES
('8', '山田太郎', '1976-03-29', '東京都文京区',
'山田さんにはいつもお世話になっています。','yamada@hogehoge.hoge')";

// mysql_query関数に上記のINSERT文を格納した$sqlと
// MySQLへの接続情報を格納している$mysql_conを
// 引数に与えてクエリを発行
$result = mysql_query ($sql, $mysql_con);

// 実行結果を表示
if ($result == false) {
    print "データの挿入に失敗したよ。";
    exit;
} else {
    print "データの挿入に成功したよ。";
}

?>

実行結果をMySQL Monitorで確認してみる。

<pre><code>mysql> select * from address_t;
+--------+--------------+------------+--------------------+--------------------------------------------------------------+------------------------+
| number | name         | birthday   | address            | explanation                                                  | mail                   |
+--------+--------------+------------+--------------------+--------------------------------------------------------------+------------------------+
|      2 | saito        | 1978-01-01 | TokyoShibuyaku     | setsumei                                                     | saito@hogehoge.hoge    |
|      3 | ito          | 1979-01-01 | TokyoToshimaku     | setsumei                                                     | ito@hogehoge.hoge      |
|      1 | suzuki       | 1989-09-01 | TokyoShibuyaku     | setsumei                                                     | suzuki@hogehoge.hoge   |
|      4 | watanabe     | 1989-09-01 | TokyoShibuyaku     | setsumei                                                     | watanabe@hogehoge.hoge |
|      5 | nakagawa     | 1989-01-01 | TokyoToshimaku     | setsumei                                                     | nakagawa@hogehoge.hoge |
|      6 | hayashi      | 1989-01-01 | TokyoArakawaku     | setsumei                                                     | hayashi@hogehoge.hoge  |
|      7 | maeda        | 1989-01-01 | TokyoTaitoku       | setsumei                                                     | maeda@hogehoge.hoge    |
|      8 | 山田太郎     | 1976-03-29 | 東京都文京区       | 山田さんにはいつもお世話になっています。                     | yamada@hogehoge.hoge   |
+--------+--------------+------------+--------------------+--------------------------------------------------------------+------------------------+
8 rows in set (0.00 sec)</code></pre>

データの挿入成功。

UPDATE (フィールドデータの更新)

<?php
// MySQLへ接続
$mysql_con = mysql_connect ("localhost", "dbuser", "hoge");
if ($mysql_con == false) {
    print "MySQLへの接続失敗。";
    exit;
}

// データベースphplessonを選択する
$select_db = mysql_select_db ("phplesson", $mysql_con);
if ($select_db == false) {
    print "データベースphplessonの選択に失敗したよ。";
    exit;
}

// address_tテーブルのフィールドデータを更新するUPDATE文
// を書いて$sqlに格納
$sql = "UPDATE address_t SET name='鈴木', birthday='1980-12-29',
address='東京都渋谷区' WHERE number='8'";

// mysql_query関数に上記のUPDATE文を格納した$sqlとMySQLへの
// 接続情報を格納した$mysql_conを引数に与えてクエリを実行
$result = mysql_query ($sql, $mysql_con);

// 実行結果を表示
if ($result == false) {
    print "データの更新に失敗";
} else {
    print "データの更新成功!";
}
?>

MySQL Monitorで確認してみる。

mysql> select * from address_t;
+--------+----------+------------+--------------------+--------------------------------------------------------------+------------------------+
| number | name     | birthday   | address            | explanation                                                  | mail                   |
+--------+----------+------------+--------------------+--------------------------------------------------------------+------------------------+
|      2 | saito    | 1978-01-01 | TokyoShibuyaku     | setsumei                                                     | saito@hogehoge.hoge    |
|      3 | ito      | 1979-01-01 | TokyoToshimaku     | setsumei                                                     | ito@hogehoge.hoge      |
|      1 | suzuki   | 1989-09-01 | TokyoShibuyaku     | setsumei                                                     | suzuki@hogehoge.hoge   |
|      4 | watanabe | 1989-09-01 | TokyoShibuyaku     | setsumei                                                     | watanabe@hogehoge.hoge |
|      5 | nakagawa | 1989-01-01 | TokyoToshimaku     | setsumei                                                     | nakagawa@hogehoge.hoge |
|      6 | hayashi  | 1989-01-01 | TokyoArakawaku     | setsumei                                                     | hayashi@hogehoge.hoge  |
|      7 | maeda    | 1989-01-01 | TokyoTaitoku       | setsumei                                                     | maeda@hogehoge.hoge    |
|      8 | 鈴木     | 1980-12-29 | 東京都渋谷区       | 山田さんにはいつもお世話になっています。                     | yamada@hogehoge.hoge   |
+--------+----------+------------+--------------------+--------------------------------------------------------------+------------------------+
8 rows in set (0.00 sec)

データの更新成功。

DELETE(フィールドデータの削除)

<?php

// MySQLへ接続
$mysql_con = mysql_connect ("localhost", "dbuser", "hoge");
if ($mysql_con == false) {
    print "MySQLへの接続失敗。";
    exit;
}

// データベースphplessonを選択する
$select_db = mysql_select_db ("phplesson", $mysql_con);
if ($select_db == false) {
    print "データベースphplessonの選択に失敗したよ。";
    exit;
}

// address_tテーブルのnumberカラムの値が
// 1のフィールドデータを削除するSQL文を書いて$sqlに格納
$sql = "DELETE FROM address_t WHERE number='1'";

// mysql_query関数に上記のDELETE文を格納した$sqlと
// MySQLの接続情報を格納した$mysql_conを引数に与えてクエリを実行
$result = mysql_query ($sql, $mysql_con);

// 実行結果を表示
if ($result == false) {
    print "データの削除に失敗";
} else {
    print "データの削除に成功";
}

?>

実行結果をMySQL Monitorで確認してみる。

mysql> select * from address_t;
+--------+----------+------------+--------------------+--------------------------------------------------------------+------------------------+
| number | name     | birthday   | address            | explanation                                                  | mail                   |
+--------+----------+------------+--------------------+--------------------------------------------------------------+------------------------+
|      2 | saito    | 1978-01-01 | TokyoShibuyaku     | setsumei                                                     | saito@hogehoge.hoge    |
|      3 | ito      | 1979-01-01 | TokyoToshimaku     | setsumei                                                     | ito@hogehoge.hoge      |
|      4 | watanabe | 1989-09-01 | TokyoShibuyaku     | setsumei                                                     | watanabe@hogehoge.hoge |
|      5 | nakagawa | 1989-01-01 | TokyoToshimaku     | setsumei                                                     | nakagawa@hogehoge.hoge |
|      6 | hayashi  | 1989-01-01 | TokyoArakawaku     | setsumei                                                     | hayashi@hogehoge.hoge  |
|      7 | maeda    | 1989-01-01 | TokyoTaitoku       | setsumei                                                     | maeda@hogehoge.hoge    |
|      8 | 鈴木     | 1980-12-29 | 東京都渋谷区       | 山田さんにはいつもお世話になっています。                     | yamada@hogehoge.hoge   |
+--------+----------+------------+--------------------+--------------------------------------------------------------+------------------------+
7 rows in set (0.00 sec)</code></pre>

データの削除成功。

SELECT(データテーブルの確認)

address_tテーブルのデータ内容をPHPで取得し、それをHTMLのtableで表示してみる。
(MySQL Monitor上で見ていたものをブラウザで確認できるようにする)

<?php

// MySQLへ接続
$mysql_con = mysql_connect ("localhost", "dbuser", "hoge");
if ($mysql_con == false) {
    print "MySQL接続失敗";
    exit;
}

// 使用するデータベースphplessonを選択
$select_db = mysql_select_db ("phplesson", $mysql_con);
if ($select_db == false) {
    print "データベース選択に失敗";
    exit;
}

// address_tテーブルにあるデータを全て取得する
// SQL文を書いて変数$sqlに格納
$sql = "SELECT * FROM address_t";

// mysql_query関数に上記のSELECT文の内容を格納した$sqlと
// MySQLへの接続情報を格納した$mysql_conを引数に与えてクエリを実行
$result = mysql_query ($sql, $mysql_con);

// HTMLテーブルを出力
print "<html>";
print "<body>";
print "<table border='1'>";
print "<tr><td>番号</td><td>名前</td><td>メールアドレス</td><td>誕生日</td><td>住所</td><td>説明</td></tr>";

// mysql_fetch_array関数を使用して$resultの実行で得られたデータを$rowへ格納
// whileによる繰り返しを使ってこれを1行ずつ配列形式で取り出して出力する
while ($row = mysql_fetch_array ($result)) {
    print "<tr><td>".$row["number"]."</td>";
    print "<td>".$row["name"]."</td>";
    print "<td>".$row["mail"]."</td>";
    print "<td>".$row["birthday"]."</td>";
    print "<td>".$row["address"]."</td>";
    print "<td>".$row["explanation"]."</td></tr>";
}

print "</table>";
print "</body>";
print "</html>";

?>

ブラウザで確認してみる。

_1232170893531

HTMLでの出力成功。

Categories

Tag Cloud

AdMob Android Apache centos CodeIgniter EC-CUBE facebookアプリ facebookページ feed Firefox Flash google googleanalytics htaccess iPad iPhone JavaScript lamp mobile nginx ogp pear php plugin rollover rss sendmail setting smarty ssh Titanium Mobile Titanium Studio tutorial ubuntu vim VirtualBox vmware vps Windows WordPress xampp youtube さくらインターネット アクセス解析 カスタム投稿