サンプル集  >  PHP  >  別DBへの2つのコネクション
別DBへの2つのコネクション
2009/07/14

1つの DB に対して 2つコネクションをつないで別トランザクションにするには mysql_connect の第4パラメータに true を指定する必要がありました。 2つの DB に対して別々にコネクションをつなぐ場合でも第4パラメータは指定する必要があるのでしょうか。

◆環境
OS Windows XP Professional Version 2002 Service Pack 3
PHP 5.2.4

transaction_test2.php
 1: 
 2: 
 3: 
 4: 
 5: 
 6: 
 7: 
 8: 
 9: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
18: 
19: 
20: 
21: 
22: 
23: 
24: 
25: 
26: 
27: 
28: 
29: 
30: 
31: 
32: 
33: 
34: 
35: 
36: 
37: 
38: 
39: 
40: 
41: 
42: 
43: 
44: 
45: 
46: 
47: 
48: 
<?php
// 1つ目
$con1=mysql_connect("localhost:3306""root""root");
mysql_select_db("phptest", $con1);
mysql_query("begin", $con1);
for($i=0; $i<10; $i=$i+1){
    $sql="insert into test_tbl"
        ." values ('text1".$i."',".($i+10).")";
    if(!mysql_query($sql, $con1)){
        echo "追加失敗:".$sql."\n";
        exit(1);
    }
}

// 2つ目(別DB)
$con2=mysql_connect("192.168.1.2:3306""root""root");
mysql_select_db("phptest", $con2);
mysql_query("begin", $con2);
for($i=0; $i<10; $i=$i+1){
    $sql="insert into test_tbl"
        ." values ('text2".$i."',".($i+20).")";
    if(!mysql_query($sql, $con2)){
        echo "追加失敗:".$sql."\n";
        exit(2);
    }
}

// 1つ目
if(strcmp($argv[1],"1")==0){
    mysql_query("commit", $con1);
    echo "con1 コミット\n";
}else{
    mysql_query("rollback", $con1);
    echo "con1 ロールバック\n";
}

// 2つ目
if(strcmp($argv[2],"1")==0){
    mysql_query("commit", $con2);
    echo "con2 コミット\n";
}else{
    mysql_query("rollback", $con2);
    echo "con2 ロールバック\n";
}

mysql_close($con1);
mysql_close($con2);
?>

1つ目はコミット、2つ目はロールバックを指定して実行します。

>php transaction_test2.php 1 0
con1 コミット
con2 ロールバック

1つ目の情報を確認します。

mysql> select * from test_tbl;
+---------+--------+
| charVal | intVal |
+---------+--------+
| text10  |     10 |
| text11  |     11 |
| text12  |     12 |
| text13  |     13 |
| text14  |     14 |
| text15  |     15 |
| text16  |     16 |
| text17  |     17 |
| text18  |     18 |
| text19  |     19 |
+---------+--------+
10 rows in set (0.00 sec)

正しく入っていました。 続いて2つ目を確認します。。 ロールバックしたから何も入っていないはずです。

mysql> select * from test_tbl;
Empty set (0.00 sec)

予想通り0件でした。 接続先が別であればmysql_connect の第4パラメータに true を指定しなくて良いようです。

▲ PageTop  ■ Home


Copyright (C) 2012 ymlib.com