2013年5月2日 星期四

PHP連接Mysql的一個小小發現

$link = mysql_pconnect($host,$user,$password);
mysql_select_db($db_name,$link);
在PHP裡面一般我們都會利用上面兩行程式來連接資料庫,這時候如果$db_name設錯了,比方說打錯字或使用了一個完全不對的名稱,這時候後面的SQL還能正確執行嗎?

如果你認為答案是否定的,那你就跟我原來的想法是一樣的......

事實上是要看情形,因為在這一行程式執行時:

$link = mysql_pconnect($host,$user,$password);
其實已經有連到了預設資料庫,也就是$user,$password有權限存取得第一個資料庫
所以這一行程式:
mysql_select_db($db_name,$link);
的作用是改變$link對應到的資料庫,就算你指定一個錯誤的名稱,他還是有連在原來連到的預設資料庫!
所以看情形就是如果你要使用的資料庫正好是連到的預設資料庫,那你根本不會發現有錯誤!

這個問題乎不大,但是有時後果也是可以很嚴重的!!因為如果你在相同的權限下,有一個正式資料庫跟測試資料庫,他們的schema完全一樣,那麼你的測試程式要是陰錯陽差地連上的正式資料庫......

所以應該要加個防呆:
if(mysql_select_db($db_name,$link) == null)
   mysql_colse($link);
這邊順便提醒各位ㄚ,如果你不做斷開,而是只有在非null時回傳$link還是有風險存在,因為萬一你的程式裡有不指定$link的mysql_query存在時,依據PHP"貼心"的設計:預設連接中還是存在這個連接的!那麼不指定$link的mysql_query一樣會執行(無誤)~

補充一下:PHP連接MSSQL時我沒測試!但我認為應該是一樣的~

沒有留言:

張貼留言