0

所以我多年来一直在寻找这个问题的答案,但找不到解决方案。

错误是:

Invalid parameter number: number of bound variables does not match number of tokens

当然我知道这个错误是什么意思,但我不明白为什么只有当我用单引号引起来时它才会抛出它。

这是我的代码:

$query = "UPDATE $DbTableName SET name=':name' WHERE id=:Id";
$result = $dbc->prepare($query); //Prepare query

$values = array('Id' => $Id, 'name' => $name); //Prepare values
$result->execute($values); //Execute Query

查看 :name 周围的单引号

如果我删除这些引号,则没有 PDO 错误,而是 MySQL 错误,因为字符串需要用单引号括起来。

我怎样才能解决这个问题?

将名称设置为不带引号的 bob 时出现 MySQL 错误:

#1054 - Unknown column 'bob' in 'field list'

提前致谢

4

2 回答 2

3

您需要param使用 PHP 手册中的示例指定 确实是一个字符串:

$sth = $dbh->prepare('SELECT name, colour, calories
    FROM fruit
    WHERE calories < ? AND colour = ?');
$sth->bindParam(1, $calories, PDO::PARAM_INT);
$sth->bindParam(2, $colour, PDO::PARAM_STR);

从技术上讲,我相信execute对 的类型做出最好的猜测判断,但是通过使用bindParamorbindValue你可以明确地说明类型。

于 2013-02-02T04:01:15.033 回答
0

这是完全重写的答案。起初我被另一个答案中的推理所愚弄,并没有对问题本身给予适当的关注。

所以这里有一个简单的答案:

我不明白为什么只有当我用单引号括起某些东西时它才会抛出它。

因为您不能在字符串中使用占位符。占位符只能表示完整的数据文字。

于 2013-02-02T05:19:17.913 回答