2010-08-27 136 views
3

我正在嘗試這個(並且在用戶發送之前處理所有PoST var,沒有SQL注入擔心):PHP + PDO:如果param爲空,則綁定null

$stmt = $con->prepare($sql); 
$stmt->bindParam(":1", $this->getPes_cdpessoa()); 
$stmt->bindParam(":2", $this->getPdf_nupessoa_def()); 

當任何這些變量爲NULL時,PDO會哭並且不要讓我的語句執行,在我的桌子上,我允許這些字段是空的。

有沒有辦法檢查值是否爲空,pdo只是將NULL綁定到那時(我的意思是,如果(空($ _ POST ['blablabla')...)每個單一參數的智能方式?

回答

5

嘗試:

$stmt = $con->prepare($sql); 
$stmt->bindParam(':1', $this->getPes_cdpessoa(), PDO::PARAM_NULL); 
$stmt->bindParam(":2", $this->getPdf_nupessoa_def(), PDO::PARAM_NULL); 

此外,見:

+0

不行的,還是哭約零日期= \ – alex 2010-08-27 18:58:09

2

bindParam需要一個實際變量傳遞給它,因爲它創建了一個引用。所以,當你的函數返回null時,bindParam並沒有真正有效的東西。

您需要改用bindValue。請注意,bindValue將立即使用您傳遞給它的任何值,其中bindParam等待語句執行以實際檢索要使用的值。

+1

如果我使用bindValue,則params的所有安全都沒有了。我想要做的只是允許空值。 – alex 2010-08-27 18:59:04

+4

'bindValue'仍然給你提供與'bindParam'相同的prepare-statement-and-placeholder優點。主要區別在於實際評估值的時間,以及無法像使用'bindParam'那樣獲取數據庫輸出的時間。 – 2010-08-27 20:19:13

0

替代語法的工作原理:

$stmt = $con->prepare($sql); 
$stmt->execute(array($this->getPes_cdpessoa(), $this->getPdf_nupessoa_def()));