所以我多年来一直在寻找这个问题的答案,但找不到解决方案。
错误是:
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'
提前致谢
答案 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
会对类型进行最佳猜测判断,但是使用bindParam
或bindValue
可以明确说明类型。
答案 1 :(得分:0)
这是完全重写的答案。我最初被另一个答案中的推理所愚弄,并没有对问题本身给予适当的关注。
所以这里的答案很简单:
我不明白为什么只有当我用单引号包围某些内容时它才真正扔掉它。
因为你不能在字符串中使用占位符。占位符只能表示完整的数据文字。