今天在同一個php進程中用mysql_connect新建了兩個mysql句柄,這兩個句柄都連接同一台數據庫,只不過操作的數據庫dbname不同,假設這兩個句柄分別是$dbhA和$dbhB,它們對應的數據庫dbname分別是dbA和dbB。我在$dbhA上操作dbA中的時候缺報錯是dbB中沒有表xxx。。。
起初以為是我應用層邏輯處理在某個地方弄混了兩個句柄,翻半天沒翻出來,后來在這里發現了同樣的問題。
原來是mysql_connect的實現中,如果再次調用它時操作的是同一個數據庫,那么會返回第一次調用mysql_connect返回的那個句柄。所以在同一個PHP進程中對同一個數據庫創建多個連接時,應該這么搞:
$db1 = mysql_connect($host1, $user1, $passwd1, true); $db2 = mysql_connect($host2, $user2, $passwd2, true);
http://php.net/manual/zh/function.mysql-connect.php 這里有對第四個參數的詳細解釋:
如果用同樣的參數第二次調用 mysql_connect(),將不會建立新連接,而將返回已經打開的連接標識。參數new_link
改變此行為並使 mysql_connect() 總是打開新的連接,甚至當 mysql_connect() 曾在前面被用同樣的參數調用過。