2011-05-19 38 views
1

一個更復雜問題的簡單例子...
變量有時被定義,有時不是。如果沒有檢查變量是否爲空,是否有一種方法可以在不中斷查詢的情況下執行插入語句?PHP PDO MySql - 偶爾插入一個未定義的變量

$stmt = $this->db->prepare("INSERT INTO employment (user_id, start_date, end_date) VALUES (:user_id, :start_date, :end_date) "); 
    $stmt->bindParam(':user_id', $user->id, PDO::PARAM_INT); 
    $stmt->bindParam(':start_date', $work->start_date, PDO::PARAM_STR); 
    $stmt->bindParam(':end_date', $work->end_date, PDO::PARAM_STR); 
    $stmt->execute(); 

有時$work->end_date可能不存在。

爲什麼「沒有檢查變量是否爲空」?該網站的主要基礎發生了變化,將會有大量的變量檢查。是的,我知道這不應該,但它是我繼承的問題。

+1

你能不只是傳遞'NULL'值的'_STR'類型?你會得到什麼樣的問題/ errormsg? – mario 2011-05-19 23:19:07

+0

刪除此問題。數據庫模式中的錯誤導致查詢無法正常工作。 PDO仍然會接受一個不存在的變量,並且默認爲NULL。因此不需要這個問題。 – csi 2011-05-20 00:08:12

+0

INSERT IGNORE?但是這需要修改插入語句。儘管在$ this-> db-> prepare(「INSERT INTO ...」)上執行搜索和替換操作會很容易,而且很危險..哈。 – mardala 2011-05-20 01:05:41

回答

0

你總是可以嘗試寫一個包裝bindParam這將檢查你的,如果你的變量定義。如果是,則繼續並bindParam,否則跳過它。

這樣稱呼它

bindSafeParam(&$stmt, ':start_date', $work->start_date, PDO::PARAM_STR);

0

如果$ work-> end_date不存在,是否有默認值?

事情是這樣的:

$end_date = empty($work->end_date)? 0 : $work->end_date 
$stmt->bindParam(':end_date', $work->end_date, PDO::PARAM_STR); 
+1

請參閱上文:問題顯示「沒有檢查變量是否爲空」。爲答案,但不是我在找什麼。 – csi 2011-05-19 23:15:33