2013-10-25 63 views
6

簡單地說,有人可以解釋我在做什麼錯在這裏 - 我只是試圖插入與準備和bindParam的數據庫,這是插入0和Null到所有字段。插入數據庫表與PDO準備和bindParam

$sql = $db->prepare("INSERT INTO db_fruit VALUES (id=? ,type=? ,colour=?)"); 
$sql->bindParam(1, $newId); 
$sql->bindParam(2, $type); 
$sql->bindParam(3, $colour); 
$sql->execute() 

BTW:該方法已爲我工作的UPDATE等,但不是在這種情況下INSERT

回答

7

你的語法不正確,試試這個:

$sql = $db->prepare("INSERT INTO db_fruit (id, type, colour) VALUES (? ,? ,?)"); 
$sql->bindParam(1, $newId); 
$sql->bindParam(2, $name); 
$sql->bindParam(3, $colour); 
$sql->execute(); 
+0

上面的逗號是不需要的。 – Jonast92

+0

你去@ Jonast92 –

+0

嘿 - 這工作!非常感謝+1 – gavin

9

擴展在AO」的答案,以下是同樣有效:

$sql = $db->prepare("INSERT INTO db_fruit (id, type, colour) VALUES (? ,? ,?)"); 
$sql->execute(array($newId, $name, $color)); 

和:

$sql = $db->prepare("INSERT INTO db_fruit (id, type, colour) VALUES (:id, :name, :color)"); 
$sql->execute(array('id' => $newId, 'name' => $name, 'color' => $color)); 

可能只是個人喜好,但我覺得這個語法要乾淨得多。

+0

我被引導相信(可能是錯誤的,非常綠色)bindParam是安全的並且替換my_real_escape_string。你的方法是否安全? – gavin

+0

@gavin是的。 PDO綁定參數的方式與分別爲每個參數調用'bindParam()'相同。 – Sammitch

+0

哦,非常感謝。我將再次參考 – gavin

-2
$sql = $db->prepare("INSERT INTO db_fruit (`id`, `type`, `colour`) VALUES (:id, :name, :colour)"); 
$sql->bindParam(':id', $newId, PDO::PARAM_INT); 
$sql->bindParam(':type', $type, PDO::PARAM_INT); 
$sql->bindParam(':colour', $colour, PDO::PARAM_STR); 
$sql->execute(); 
+0

您不必將數組放在'execute'中,因爲您已經擁有'bindParam'內的值 – laviku