2013-10-25 18 views
6

Trong thuật ngữ đơn giản ai đó có thể giải thích những gì tôi đang làm sai ở đây - Tôi chỉ đơn giản là cố gắng chèn vào một db với chuẩn bị và bindParam, đây là chèn 0 và Null vào tất cả các trường .INSERT vào bảng DB với PDO chuẩn bị và 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: phương pháp này đã làm việc cho tôi cho CẬP NHẬT vv, nhưng không phải trong trường hợp này cho INSERT

Trả lời

7

cú pháp của bạn là không chính xác, hãy thử điều này:

$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

Dấu phẩy trên là không cần thiết. – Jonast92

+0

ở đó bạn đi @ Jonast92 –

+0

Hey - CÔNG TRÌNH NÀY !!! Cảm ơn bao giờ rất nhiều +1 – gavin

9

Mở rộng trên AO' Câu trả lời, những điều sau đây cũng hợp lệ:

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

Và:

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

Chỉ có thể là sở thích cá nhân, nhưng tôi thấy cú pháp này gọn gàng hơn nhiều.

+0

Tôi đã được dẫn dắt để tin rằng (có thể sai, rất xanh) mà bindParam là an toàn và thay thế my_real_escape_string. Phương pháp của bạn có an toàn không? – gavin

+0

@gavin có. PDO liên kết các tham số giống như khi bạn gọi 'bindParam()' riêng cho mỗi tham số. – Sammitch

+0

cảm ơn rất tuyệt. Tôi sẽ đề cập đến điều này một lần nữa – 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

Bạn không cần phải đặt mảng bên trong 'execute' bởi vì bạn đã có các giá trị bên trong' bindParam' – laviku

Các vấn đề liên quan