2012-07-06 91 views
1

以下預備聲明不會插入到數據庫中。php pdo執行陣列報價

$sid =1; 
$sid2 = $GET['sid2']; //empty 
$position = 0; 
$name = "John"; 

$new = $connectdb->prepare("INSERT INTO `table1` VALUES ('',:sid,:sid2,:position,:name)"); 
       $new->execute(array(':sid'=>$sid,':sid2'=>$sid2,':position'=>$position,':name'=>$name)); 

當我添加引號來執行數組值,然後插入工作。

$new->execute(array(':sid'=>"$sid",':sid2'=>"$sid2",':position'=>"$position",':name'=>"$name")); 

我想知道的是通過加引文來影響PDO的消毒效果嗎?

回答

2

在你的情況下,唯一的區別是$sid2"$sid2"

如果$sid2是一個字符串,然後$sid2一樣的是"$sid2",但是當$sid2null,然後的事情改變了。如果$sid2null,則"$sid2"將是空字符串""

如果您的sid2列有NOT NULL約束,那麼您將無法插入空值,但可以插入空字符串。

0

Myabe你應該嘗試:

$new->execute(
array(
    ':sid'=>$connectdb->quote($sid), 
    ':sid2'=>$connectdb->quote($sid2), 
    ':position'=>$connectdb->quote($position), 
    ':name'=>$connectdb->quote($name), 
) 
); 
+0

對於準備好的聲明,你不應該做報價。 – xdazz 2012-07-06 06:05:02