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 編資料