0
0

More than 1 year has passed since last update.

ワイが出会ったエラーについて①(PHP)

Posted at

Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in

どんな時に出る?

→ 引数の数が合いませんえ、
と、上記のエラーは申しているようです。
後述しますが、最初に:deflag だけしか宣言してないのに
後からarrayで出てくる:idとはなんぞや。
とこのケースでは言われてるわけです。

ワイが実際にこのエラーに直面した際の具体例を書いていく。

どんな時に出た?

→ TODOリストを作っている最中。
htmlで作ったチェックボックスにチェックを入れると、
そのtodoの内容を消す、ということがしたかった。
正確には、DELETE文で消すわけではなくて、チェックボックスにチェックが入ると
UPDATE文が走ってデリートフラグが立つようにしたかった。

そこで書いたのがこのようなコード。(抜粋)
もしコードがポンコツだったらごめんなさい。

$sql = 'UPDATE td SET delete_flg = :deflag’;

$stmt = $dbh->prepare($sql);
return $stmt->execute(array(
':deflag' => 1, ':id' => $id));
}

deleteflg();

はい。:idが最初に宣言されてないので、数が合いませんけど、
って言われてしまったわけです。

下記のようにしたら出なくなりました。
要は:idを最初に書いてあげればよかったのです。
数が合うようになりました。
エラーは解消です。

$sql = 'UPDATE td SET delete_flg = :deflag,
WHERE id = :id';

$stmt = $dbh->prepare($sql);
return $stmt->execute(array(
':deflag' => 1, ':id' => $id));
}

deleteflg();

まだTODOアプリで、うんうん唸りながら作っている最中です。
もしかしたらこのコード自体全部書き直すかもしれません。
なんか自分で言うのもアレですが全体的に仕様やコードがいけてない気しかしない。。
とりあえず今回は、備忘のためと自身のアウトプット並びに言語化のために
エラーの話がしたかっただけなので、これで以上とします。

記事の内容が誤っていたり、改善点がある場合はお知らせいただけたら幸いです。
ご指摘は真摯に受け止める所存です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0