6

配列形式のパラメーターを使用して、単純なMySQL挿入クエリを使用しようとしています。パラメータの数が間違っていると言われ続けます。私は次のことを試しましたが、すべて同じエラーが発生します。

$stmt3 = $link->prepare('INSERT INTO messages VALUES(null, :room, :name, :message, :time, :color)');
$stmt3->execute(array(':room' => $Clean['room'],':name' => $Clean['name'],':message' => $Clean['message'],':time' => $time,':color:' => $Clean['color']));

$stmt3 = $link->prepare('INSERT INTO messages VALUES(:null, :room, :name, :message, :time, :color)');
$stmt3->execute(array(':null' => null, ':room' => $Clean['room'],':name' => $Clean['name'],':message' => $Clean['message'],':time' => $time,':color:' => $Clean['color']));

ヌル挿入を回避するために列を明確に宣言するだけでなく、次のようになります。

$stmt3 = $link->prepare('INSERT INTO messages (room, name, message, time, color) VALUES(:room, :name, :message, :time, :color)');
$stmt3->execute(array(':room' => $Clean['room'],':name' => $Clean['name'],':message' => $Clean['message'],':time' => $time,':color:' => $Clean['color']));

PDOを使用するのはこれが初めてです(通常はmysqliを使用しますが、現在の共有ホストにはmysqlndプラグインがないため、prepare()を使用できません。そのため、その観点からの洞察をいただければ幸いです。

4

2 に答える 2

21

問題-そしてあなたは自分自身を蹴るでしょう-はにあり:colorます。

呼び出し時にそのマーカーに渡す値の配列キーには、execute()という名前が付けられ:color:ます。末尾を削除します:(とにかくこれは単なるタイプミスだったと思います)。

$stmt3->execute(array(
    ':room' => $Clean['room'],
    ':name' => $Clean['name'],
    ':message' => $Clean['message'],
    ':time' => $time,
    ':color' => $Clean['color'],
    ));
于 2012-06-15T10:37:37.760 に答える
-2

私はここで間違っているかもしれませんが、私が知る限り、あなたはこれを行う必要があります:

$stmt3->bindParam(':room', $Clean['room']);
$stmt3->bindParam(':name', $Clean['name']);
//and so on

しかし、個人的な好みとして、私はいつもこのようにそれをしました

$stmt3 = $link->prepare('INSERT INTO messages VALUES(null, ?, ?, ?, ?, ?)');
$stmt3->execute(array($Clean['room'], $Clean['name'], $Clean['message'], $time, $Clean['color']))
于 2012-06-15T10:31:33.807 に答える