TOP書籍連動> 複数のクエリを同時に実行
まるごと PHP!
まるごと PHP!

Part3:MySQL拡張サポート(3)

著者:桝形誠二(MASUGATA, Seiji)   2005/3/23
1   2  次のページ
複数のクエリを同時に実行

   改良版MySQL拡張サポートでは、それぞれのクエリをセミコロン(;)でつなげることで、複数のクエリを同時に実行できます。

   通常のクエリの実行にはquery()メソッドやexecute()メソッドを使いますが、複数のクエリを同時に実行する場合はmulti_query()メソッドを使います(リスト10)。
リスト10:multiQuery.php
<?
include( "child.inc" );

try{

$ChildMySQLi = new CihildMySQLi( "localhost", "root", "", "testdb" );

$SQL = "select no1, no2 from hoge where no1 <= 1 order by no1;".
"select no1, no2 from hoge where no1 <= 2 order by no1;".
"select no1, no2 from hoge where no1 <= 3 order by no1;".
"select no1, no2 from hoge where no1 <= 4 order by no1;".
"select no1, no2 from hoge where no1 <= 5 order by no1;";

$ChildMySQLi->multi_query( $SQL );

do {

$Result = $ChildMySQLi->store_result( );

while( $Array = $Result->fetch_row( ) )
{
print_r( $Array );
}

$Result->close( );

if( $ChildMySQLi->more_results( ) )
{echo "-----------------------------\n"; }

} while( $ChildMySQLi->next_result( ) );

} catch( Exception $Exception ) {

print_r( $Exception->getMessage( )."\n" );

}

?>

   結果を取得するときも、通常の結果の取得とは少し違います。まず、store_result()メソッドを使って、結果オブジェクトを取得し、データを取り出します。結果オブジェクトの使い方は、query()メソッドやexecute()メソッドの場合と変わりません。

   結果オブジェクトから取得できるデータをすべて得られたら、次はmore_results()メソッドを使って、次の結果 オブジェクトが存在するかどうかを調べていきます。存在する場合にはnext_result()メソッドを使って、次の結果オブジェクトへ移動します。移動した後は、最初のstore_result()メソッドを使って結果オブジェクトを取得し、またmore_results()メソッドを使って、……という処理を、すべての結果オブジェクトを取得するまで繰り返します。

その他の機能(1)

   改良版MySQL拡張サポートでは、さまざまなオプションを明示的に指定してMySQLデータベースに接続できます。

   まず、mysqli_init()関数を使ってMySQLiオブジェクトを初期化します。その後、options()メソッドを使ってオプションを定義します。オプションを定義したら、real_connect()メソッドを使ってMySQLデータベースへの接続処理を行います(リスト11)。

リスト11:real_connect.php
<?
$MySQLi = mysqli_init( );

$MySQLi->options( MYSQLI_INIT_COMMAND, "SET AUTOCOMMIT=1" );

$MySQLi->real_connect( "localhost", "root", "", "testdb" );

$MySQLi->query( "insert into hoge values( 88, 'test88' )" );

if( $MySQLi->error != "" ) { die( $MySQLi->error ); }

$MySQLi->close( );

$MySQLi = mysqli_init( );

$MySQLi->options( MYSQLI_INIT_COMMAND, "SET AUTOCOMMIT=0" );

$MySQLi->real_connect( "localhost", "root", "", "testdb" );

$MySQLi->query( "insert into hoge values( 99, 'test99' )" );

if( $MySQLi->error != "" ) { die( $MySQLi->error ); }

$MySQLi->close( );

$MySQLi = new mysqli( "localhost", "root", "", "testdb" );

$Result = $MySQLi->query( "select no1, no2 from hoge order by no1" );

if( $MySQLi->error != "" ) { die( $MySQLi->error ); }

while( $Array = $Result->fetch_assoc( ) )
{
print_r( $Array );
}

?>
1   2  次のページ



著者プロフィール
桝形 誠二
様々な言語を経験していく中でPHPと出会い、初心者に易しいという魅力に惹かれ続けて早5年。色んな事をPHPで実装しようとしすぎて周囲の反感を買いやすいのが最近の悩み。


INDEX
Part3:MySQL拡張サポート(3)
複数のクエリを同時に実行
  その他の機能(2)