使用单引号时出现PDO错误

时间:2013-02-02 03:55:29

标签: php mysql pdo

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

错误是:

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'

提前致谢

2 个答案:

答案 0 :(得分:3)

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

$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会对类型进行最佳猜测判断,但是使用bindParambindValue可以明确说明类型。

答案 1 :(得分:0)

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

所以这里的答案很简单:

  

我不明白为什么只有当我用单引号包围某些内容时它才真正扔掉它。

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