Tag,
folgendes simples Statement:
1 2 |
$sth = $this->dbh->prepare('INSERT INTO tag_per_gif (`gif_name`, `tag_id`) VALUES (':gif', ':id');'); $sth->execute(array(':gif' => $gif, ':id' => $tagId)); |
führt auf folgenden Fehler:
SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens
Diese Fehlermeldung ist ziemlich irreführend, denn ein Blinder sieht: Zwei Variabeln, zwei Tokens. Der Trick ist: PDO::prepare escaped. Das ist einer der Gründe für prepared statements mit PDO: Dass man sich nicht um Escaping kümmern muss. Das bedeutet aber unübersichtlicherweise auch, dass man nicht selbst escapen darf, und zwar gar nicht:
1 2 |
$sth = $this->dbh->prepare('INSERT INTO tag_per_gif (`gif_name`, `tag_id`) VALUES (:gif, :id);'); $sth->execute(array(':gif' => $gif, ':id' => $tagId)); |
funktioniert. Man beachte die fehlenden Hochkommata um :gif und :id.