January 19, 2006

sqlrelay の php api メモ

あんまりサンプルソースがないので
このへんとかを参考に組んでみる
http://schurli.wu-wien.ac.at/sqlrelay/sqlrelay/api/php/doc.html
http://schurli.wu-wien.ac.at/sqlrelay/sqlrelay/programming/php.html

掲示板とかでコネクションプーリングのネタによくあがってるがそんなに
実績があるわけではないのかな?

<?php
// MYSQLっぽいSQLRELAYの書き方(カーソル使わない書き方)
// ---接続開始処理
$HOST="";
$PORT="";
// TCPIP経由だとなぜかむちゃくちゃ遅い
$SOCKET_PATH="/tmp/sqlrelay.tmp"; //UNIXソケット接続
$ID="ID";
$PASS="PASS";
$con    = sqlrcon_alloc($HOST, $PORT, $SOCKET_PATH, $ID, $PASS, 0, 1);
// 接続が成功したかどうか
$ret = sqlrcon_ping($con);
if( !$ret ){
	print("接続失敗");
	exit();
}
$cur	= sqlrcur_alloc($con);

// ---トランザクション開始
sqlrcon_autoCommitOff($con);

// ---SELECT処理
$sql	= "select * from test";
$ret    = sqlrcur_sendQuery($cur, $sql);
if( !$ret ){
	print(sqlrcur_errorMessage($cur));
}else{
	$cnt	= sqlrcur_rowCount($cur);
	if($cnt == 0){
		print("NOT FOUND");
	}else{
		$colcnt = sqlrcur_colCount($cur);
		for($Row=0; $Row<$cnt; ++$Row){
			for($Col=0; $Col<$colcnt; ++$Col) {
				$name           = sqlrcur_getColumnName($cur, $Col);
				$data[$name]    = sqlrcur_getField($cur, $Row, $Col);
			}
		}
		print_r($data);
	}
}
// ---INSERT処理
$sql	= "insert into test (id,value) values ('ABC','DEF')";
$ret    = sqlrcur_sendQuery($cur, $sql);
if( !$ret ){
	print(sqlrcur_errorMessage($cur));
}else{
	$cnt    = sqlrcur_affectedRows($cur);
}
// ---UPDATE処理
$sql	= "update test set value=xxx where id='ABC'";
$ret    = sqlrcur_sendQuery($cur, $sql);
if( !$ret ){
	print(sqlrcur_errorMessage($cur));
}else{
	$cnt    = sqlrcur_affectedRows($cur);
	if( $cnt == 0 ){
		print("更新対象のデータはなかった");
	}else{
		print("{$cnt}件アップデート");
	}
}
// ---DELETE処理
$sql	= "delete from test";
$ret    = sqlrcur_sendQuery($cur, $sql);
if( !$ret ){
	print(sqlrcur_errorMessage($cur));
}else{
	$cnt    = sqlrcur_affectedRows($cur);
	if( $cnt == 0 ){
		print("削除対象のデータはなかった");
	}else{
		print("{$cnt}件削除");
	}
}

// ---トランザクション終了
$ret    = sqlrcon_commit($con);
switch($ret){
case    1:
	break;
case    0:
case    -1:
default :
	print("トランザクションコミットエラー");
	break;
}

// ---接続終了処理
sqlrcon_endSession($con);
sqlrcur_free($cur);
sqlrcon_free($con);

?>
うーむ sqlrcur_sendQuery($cur, $sql); 後に sqlrcon_endSession($con); すると
sqlrelayのコネクションを占有しないで他のプロセスに空き時間接続を渡すことができるのか・・・
しかしこれやるとトランザクションのコミットが発生するのかな?

というかなんかトランザクション処理がうまく動いてないような・・・(汗

情報がなさすぎるんだけど、これってまともに運用でつかってるひといるのかな???
参照しかしないなら問題なくつかえそうだけども・・・
投稿者 you21979 : January 19, 2006 09:32 PM | トラックバック
コメント
コメントする









名前、アドレスを登録しますか?