2013-10-25 43 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