SAK 図書館
MySQL 編4 - PHP、レコード更新、レコード参照、トランザクション
PHP + MySQL の組み合わせは、あまり私は使うことがないかなと、手を抜いて 古いバージョンの MySQL の PHP 用ドライバ関係を新しい MySQL 接続に そのまま使用してみた。 これがなんと、トランザクションも含めて完全に正常に動くのです。 もっとも、詳細なテストをしているわけではないので、何か不都合が発生する 場合があるかもしれない。 以下のテスト程度では、またく問題なしである。 ■MySQL + PHP レコード更新 ・レコード追加で、日本語データが指定できるかテストする。 問題なく追加できる。 <?php /* ======================================================================== MySQL 問い合わせ、レコード更新テスト ======================================================================== */ ?> <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <TITLE>MySQL 問い合わせ、レコード更新テスト</TITLE> </HEAD> <BODY> <P align="center">▼ MySQL 問い合わせ、レコード更新テスト ▼</P> <HR> <DIV> <?php // MySQL 接続 if (!($cn = mysql_connect("localhost", "sak", ""))) { die; } // MySQL DB 選択 if (!(mysql_select_db("sak"))) { die; } // MySQL トランザクション開始 $sql = "begin"; if (!(mysql_query($sql))) { die; } // MySQL レコード追加 $sql = "insert into testm values('日本語', 10, 20, 30)"; if (!(mysql_query($sql))) { die; } print '追加件数= ' . mysql_affected_rows() . '<BR>'; // MySQL トランザクションコミット $sql = "commit"; if (!(mysql_query($sql))) { die; } // MySQL 切断 mysql_close($cn); // 正常終了 print "<P>正常終了</P>"; ?> </DIV> <HR> </BODY> </HTML> ■MySQL + PHP トランザクションロールバックテスト ・昔の MySQL はトランザクションをサポートしていなくて悲しかったが、 最近のはトランザクションを利用する設定は面倒であるが、ちゃんと ロールバックすることができる。 <?php /* ======================================================================== MySQL 問い合わせ、ロールバックテスト ======================================================================== */ ?> <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <TITLE>MySQL 問い合わせ、ロールバックテスト</TITLE> </HEAD> <BODY> <P align="center">▼ MySQL 問い合わせ、ロールバックテスト ▼</P> <HR> <DIV> <?php // MySQL 接続 if (!($cn = mysql_connect("localhost", "sak", ""))) { die; } // MySQL DB 選択 if (!(mysql_select_db("sak"))) { die; } // MySQL トランザクション開始 $sql = "begin"; if (!(mysql_query($sql))) { die; } // MySQL レコード追加 $sql = "insert into testm values('トラン', 10, 20, 30)"; if (!(mysql_query($sql))) { die; } print '追加件数= ' . mysql_affected_rows() . '<BR>'; // MySQL トランザクションロールバック $sql = "rollback"; if (!(mysql_query($sql))) { die; } // MySQL 切断 mysql_close($cn); // 正常終了 print "<P>正常終了</P>"; ?> </DIV> <HR> </BODY> </HTML> ■ロールバック確認 select * from testm; +--------+---------+---------+---------+ | キー | データ1 | データ2 | データ3 | +--------+---------+---------+---------+ | 日本語 | 10 | 20 | 30 | +--------+---------+---------+---------+ ■MySQL + PHP レコード参照 ・レコード参照で、日本語項目、日本語データが参照できるかテストする。 問題なく参照できる。 <?php /* ======================================================================== MySQL 問い合わせ、レコード参照テスト ======================================================================== */ ?> <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <TITLE>MySQL 問い合わせ、レコード参照テスト</TITLE> </HEAD> <BODY> <P align="center">▼ MySQL 問い合わせ、レコード参照テスト ▼</P> <HR> <DIV> <?php // MySQL 接続 if (!($cn = mysql_connect("localhost", "sak", ""))) { die; } // MySQL DB 選択 if (!(mysql_select_db("sak"))) { die; } // MySQL 問い合わせ $sql = "select * from testm order by キー"; if (!($rs = mysql_query($sql))) { die; } print '照会件数= ' . mysql_num_rows($rs) . '<BR>'; // MySQL レコード参照開始 $init = True; while ($item = mysql_fetch_array($rs)) { // MySQL 見出処理開始 if ($init) { // MySQL レコード項目数参照 $clct = count($item) >> 1; print "レコード項目数= $clct<BR>"; // MySQL 項目名参照 print '=================================<BR>'; print '|'; reset($item); for ($i = 0; $i < $clct; $i++) { $tmp = each($item); // 添字キー読み飛ばしダミー $tmp = each($item); list($mds, $dmy) = $tmp; print " $mds |"; } print '<BR>'; print '=================================<BR>'; // MySQL 見出処理終了 $init = False; } // MySQL 項目データ参照 print '|'; for ($i = 0; $i < $clct; $i++) { print " $item[$i] |"; } print '<BR>'; // MySQL レコード参照終了 print '=================================<BR>'; } // MySQL 切断 mysql_close($cn); // 正常終了 print "<P>正常終了</P>"; ?> </DIV> <HR> </BODY> </HTML> ■その他 PHP + MySQL 操作 ・『PHP + MySQL 編』 ↑こちらにも PHP + MySQL の資料があります。(古いバージョンでの資料) ■MySQL 編資料
■PostgreSQL 編、JAVA Servlet、JSP 編資料
■SQL 基礎編資料
■SQL 基礎実地編資料
■SQL チューニング編資料
■Oracle PL/SQL 編資料