この話書きましたっけ?今、調べたら、このブログには引っかかるんだけど、ぜんぜん違うページがひっかかるので、ここに書いておきます。
■■ 前提となるテーブル
ここのテーブルを使わせてもらいます
SQL文を引用すると、こんなかんじ
CREATE TABLE HELLO_WORLD_TABLE ( NO INTEGER NOT NULL, LANGUAGE VARCHAR(50) , MESSAGE VARCHAR(100) , PRIMARY KEY(NO) ); |
■■ やること
以下のPHPプログラムを実行します。
ここでは、
(1)DBをオープンします
(2)データをセットしてINSERTします
→insertToTblという関数を呼び出します
(3)その結果を取得します
→selectTblという関数を呼び出します
(4)DBをクローズします
(5)結果を表示します
これらを、PHPで書くと、以下のとおり
<HTML> <BODY> <? include("hello.php"); //--------------------------------------// // DB操作部分 // //--------------------------------------// // DBのオープン // ユーザー名などは、実際にあわせて、書き換える $db = mysqli_connect("localhost", "ユーザー名", "パスワード", "使用DB"); if (!$db) { print("接続できませんでした"); exit(); } // INSERTしてみる $data['NO'] = 3; $data['LANGUAGE'] = "テスト語"; $data['MESSAGE'] = "Insertのテスト"; insertToTbl($db,$data); // 結果を取得してみる $kekka = selectTbl($db); // クローズ mysqli_close($db); //--------------------------------------// // 結果表示部分 // //--------------------------------------// print "<table border = 1>"; for($i = 0 ; $i < count($kekka); $i ++ ) { print "<tr>"; for ($j = 0 ; $j < count($kekka[$i]) ; $j ++ ) { print "<td>" . $kekka[$i][$j] . " </td>"; } print "</tr>"; } print "</table>"; ?> </BODY> </HTML> |
(上記中 < > ¥ は実際には、半角です)
■■それらを実現する関数
prepareステートメントを使って、Insert実行の例が、
insertToTbl($db,$data);のほう。
検索のほうが
selectTbl($db);
どちらも、利用前に、
$db = mysqli_connect(ホスト名, "ユーザー名", "パスワード", "使用DB");
で、DBのハンドルを取得しておく必要有(それを引数$dbとして渡している)
また、最後に
mysqli_close($db);
を行う。
プログラムは、このとおり
<? function insertToTbl($db,$data) { // ステートメントの設定 $sql = 'INSERT INTO HELLO_WORLD_TABLE (NO,LANGUAGE,MESSAGE) VALUES(?,?,?)'; $stmt = mysqli_prepare($db,$sql); mysqli_stmt_bind_param( $stmt,"iss",$NO,$LANGUAGE,$MESSAGE); // 値設定 $NO = $data["NO"]; $LANGUAGE = $data["LANGUAGE"]; $MESSAGE = $data["MESSAGE"]; //SQL文を実行する mysqli_stmt_execute($stmt); //ステートメントクローズ mysqli_stmt_close($stmt); } function selectTbl($db) { //SQL作成 $sql = 'select * from HELLO_WORLD_TABLE'; //SQL文を実行する $rs = mysqli_query($db, $sql); if (!$rs) { return $kekka; } $i = 0; while($row=mysqli_fetch_array($rs)) { for($j=0;$j < count($row) ; $j++) { $kekka[$i][$j] = $row[$j]; } $i++; } //結果レコードをメモリから開放 mysqli_free_result($rs); return $kekka; } ?> |
(上記中 < > ¥ は実際には、半角です)
■■ つけたし
今回は、commit処理を行っていない。
する場合は、DBのハンドルを取得したのち
//オートコミットOFF
mysqli_autocommit($db, FALSE);
をして、コミットする場合は、
mysqli_commit($db);
ロールバックのときは
mysqli_rollback($db);
を発行する。
■■ なんで、こんなことをかくのか
insertToTbl($db,$data);と、selectTbl($db);のテーブルごとの自動生成プログラムを例として、今度書くかもしれないので(このブログに)