|
|
前のページ
1
2 |
|
プリペアドクエリとバインド変数(3)
|
|
結果は表2のようになりました(realは総処理時間、userはユーザーCPU時間、sysはシステムCPU時間)。少々ですが、実行効率の向上が確認できます。
|
表2:プリペアドクエリとバインド変数の有無による性能評価 |
条件 |
real |
user |
sys |
プリペアドクエリとバインド変数を使った場合 |
12.41 |
3.25 |
0.74 |
プリペアドクエリとバインド変数を使わなかった場合 |
14.35 |
3.40 |
0.76 |
|
|
トランザクション |
MySQL 4.1.2は既定でInnoDBをサポートしており、トランザクション処理が可能です。これに伴い、改良版MySQL拡張サポートでもトランザクション処理の制御ができます(リスト9)。
|
リスト9:transaction.php |
<?
include( "child.inc" );
try{
$ChildMySQLi = new CihildMySQLi( "localhost", "root", "", "testdb" );
$ChildMySQLi->autocommit( false );
$InsertStmt = $ChildMySQLi->prepare( "insert into hoge values( ?, ? )" );
$InsertStmt->bind_param( "is", $No1, $No2 );
for( $XX = 1; $XX <= 5; ++$XX )
{
$No1 = $XX;
$No2 = "test".$XX;
ChildStmt::execute( $ChildMySQLi,$InsertStmt );
}
$Result = $ChildMySQLi->query( "select no1, no2 from hoge order by no1" );
while( $Array = $Result->fetch_assoc( ) )
{
print_r( $Array );
}
$ChildMySQLi->rollback( );
// $ChildMySQLi->commit( );
echo "\n[reTry!!]\n\n";
$Result = $ChildMySQLi->query( "select no1, no2 from hoge order by no1" );
while( $Array = $Result->fetch_array( ) )
{
print_r( $Array );
}
} catch( Exception $Exception ) {
print_r( $Exception->getMessage( )."\n" );
}
?> |
当然ですが、制御できるのはテーブルの型がInnoDBである場合に限ります。テーブルの型をInnoDBにしたい場合は、テーブルを作成するCREATE文の一番最後に「TYPE = InnoDB」を付けます。
トランザクション処理を破棄したい場合はrollback()メソッド、逆に確定したい場合はcommit()メソッドをそれぞれ利用します。autocommit()メソッドを使うと、自動コミットの有効・無効を定義できます。自動コミットを有効にすると、エラーが発生しない限り、実行した時点でトランザクション処理が確定します。
|
前のページ
1
2
|
|
|
|
著者プロフィール
桝形 誠二
様々な言語を経験していく中でPHPと出会い、初心者に易しいという魅力に惹かれ続けて早5年。色んな事をPHPで実装しようとしすぎて周囲の反感を買いやすいのが最近の悩み。
|
|
|
|