我有一些代码
$query = 'INSERT INTO table
(foo, bar, baz)
VALUES
(:foo, :bar, :baz)
ON DUPLICATE KEY UPDATE foo = :foo,
bar = :bar,
baz = :baz';
$stmt = $dbc->prepare($query);
$stmt->bindValue(':foo', $foo, PDO::PARAM_STR);
$stmt->bindValue(':bar', $bar, PDO::PARAM_STR);
$stmt->bindValue(':baz', $baz, PDO::PARAM_STR);
$stmt->execute();
它抛出一个错误:
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens
显然,我拥有的 token 数量是绑定(bind)变量的两倍,但我拥有相同数量的唯一 token 。所以我的问题是,每个 token 只能使用一次吗?我是否需要重命名每个标记的第二个实例才能使其正常工作,或者是否有一种方法可以在不将我的 bindValue
语句加倍的情况下进行重命名?
最佳答案
事实证明,您可以重复使用 token 。我的错误完全是另一回事。因此,如果您将来发现此问题想知道同样的事情,是的,这是可能的。您的错误来自其他原因。可能漏掉了一个冒号,或者在你的一堆标记中忘记为其中一个添加 bindValue
。
正如下面 Barmar 所指出的,此功能可能需要 PDO::ATTR_EMULATE_PREPARES
启用发生。 MySQL 默认启用它,但如果使用 Laravel 等框架,它可能会被关闭。
关于php - PDO token 是否需要匹配 bindValue 1 :1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36728761/