有時候我們會在同一個頁面同時使用兩個資料庫,

若連線字串是放在CLASS的CONSTRUCTOR裡面, 通常我們都只要NEW 一次, 就可以一直保持資料庫連線,

但若兩個資料庫交替使用, 則會發生連線字串混亂的狀況.

此時應該在CLASS裡面每個FUNCTION都的MYSQL_QUERY之前都指定連線字串,

這樣就可以保持一MYSQL_QUERY對應一個資料庫的狀況了.

class sample {

function DATABASE() {
include("db1.php");

}

function FIRSTCONNECT() {
$this->DATABASE();
mysql_query("…..");
}

}

class sample2 {

function DATABASE2() {
include("db2.php");

}

function ANOTHERCONNECT() {
$this->DATABASE2();
mysql_query("…..");
}

}

$firstclass = new sample;

$secondclass = new sample2;

$secondclass->ANOTHERCONNECT(); //讀取自DB2 的資料庫

$firstclass->FIRSTCONNECT(); //讀取自DB1 的資料庫

最近在撰寫PHP程式的時候遇到了兩個花費我不少時間的問題.

第一個問題:

我們常常在設計表單的時候都會設計 新增, 刪除, 編輯的功能, 在完成這些功能之後, 我們習慣用 header("Location: xx.php"); 回到瀏覽列表. 但有時候我們在編輯成功回到瀏覽列表後(沒有錯誤訊息), 但資料卻沒有被編輯修改成功. 最糟糕的是MYSQL_ERROR() 也帶不出到底問題出在哪裡. 這個時候就可以推斷是ID 沒有被送入MYSQL.

比如說: mysql_query("UPDATE products SET title = ‘$title’ WHERE id = ‘$id’") or die(mysql_error());

這個時候, 如果你的$id 變數值是 "" 也一樣會通過指令, MYSQL 不會告訴你有錯誤. 所以無論你怎麼試都還是發現指令明明就沒問題但怎樣就是沒辦法UPDATE成功.

第二個問題:

還有另一個可能性是出在一個天殺的錯誤:

<input type="hidden" name="id" values="<?php echo $_GET['id']; ?>" />

當我們想要用隱藏表單傳送ID值的時候, 會用以上的HTML來傳送, 你發現問題出在哪裡嗎?

答案很明顯, 就是 "values" ! values 是沒有 "s"的, 多了一個"s" 你的表單就送不出去ID這個值了.

正解: <input type="hidden" name="id" value="<?php echo $_GET['id']; ?>" />

若這個問題剛好與以上的問題碰在一起, 肯定會在DEBUG上花很時間.

表面上看起來很簡單的問題, 有時候會搞到我們抓狂都找不到BUG. 在這裡與大家分享經驗.