2013-10-25 9 views
6

ここで間違っていることを説明できる人が簡単です - 準備とbindParamを使用してdbに挿入しようとしていますが、これは0とNullをすべてのフィールドに挿入しています。PDOを使用したDBテーブルへのINSERTと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() 

ところで:このメソッドは、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

'bindParam'の中にすでに値があるので、配列を' execute'の中に置く必要はありません。 – laviku

関連する問題