ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

PHPのmysqliを使った、SQL文実行(prepareで)と検索実行(commitの話も)

2005-11-28 16:25:48 | PHP

 この話書きましたっけ?今、調べたら、このブログには引っかかるんだけど、ぜんぜん違うページがひっかかるので、ここに書いておきます。

■■ 前提となるテーブル
ここのテーブルを使わせてもらいます
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);のテーブルごとの自動生成プログラムを例として、今度書くかもしれないので(このブログに)

この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 仕様決めがしやすく、テスト... | トップ | PHPでつくる、仕様書からのプ... »
最新の画像もっと見る

PHP」カテゴリの最新記事