我有一个如下所示的查询:
SELECT CONCAT('path/to/page/?id=', id) AS link FROM users WHERE name = ?
我正在使用 PDO 准备此语句,但收到错误
Invalid parameter number: number of bound variables does not match number of tokens
因为它认为 CONCAT 字符串中的问号是占位符。
有什么方法可以转义问号,以便 PDO 知道它不是占位符吗?
请不要评论其他获取链接的方式。我正在更改进入旧模板引擎的旧代码,因此找到一种方法来转义问号比不在查询中放置问号要少很多工作。
PDO 不会被引号内的问号混淆。我刚刚使用 PHP 5.5.15 进行了测试。
$sql = "SELECT CONCAT('path/to/page/?id=', id) AS link FROM foo WHERE name = ?;";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(1, 'name');
$stmt->execute();
print_r($stmt->fetchAll());
它工作正常,没有出现参数数量错误的错误。您的错误是由绑定参数的方式引起的,而不是由 SQL 语法引起的。
我怀疑你没有向我们展示整个 SQL 查询,因为没有 FROM 的 WHERE 无论如何都是语法错误。因此,您必须有未向我们展示的其他参数占位符。如果您向我们展示绑定参数(或将参数传递给execute())的方式,也会很有帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)