【发布时间】:2015-02-12 05:36:39
【问题描述】:
我想执行以下查询:
选择
*,
(SELECT COUNT(*) FROM `tab2` WHERE `parent` = :id) AS `sum`
从`tab1`
WHERE `id` = :id
如您所见,:id 占位符在查询中出现了两次。因此,如果我尝试使用以下命令执行此语句:
$q->execute(['id'=>$row_id]);
我收到错误消息:
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number
所以我必须重写准备好的查询并使用 :id1 和 :id2 占位符执行数组,这对我来说看起来有点愚蠢。
这是在准备好的语句的多个位置使用一个占位符的唯一方法吗?
【问题讨论】:
-
@DarkBee 有点。您发布为可能重复的链接使用
SELECT :Param。最初的问题是 OP 试图绑定一个列。此问题stackoverflow.com/q/182287 解释并指定“表和列名称不能被PDO 中的参数替换”,来自同一页面上的答案stackoverflow.com/a/182353。 -
@Fred-ii- true,但该页面上标记的答案表明占位符只能使用一次。
-
@Fred-ii- 我很惊讶。为什么会有这样的限制?!是 MySQL 的限制吗?
-
@Fred-ii- 我认为这不是开启 PDO::ATTR_EMULATE_PREPARES 的理由?
-
@DarkBee 是的,我同意,这就是为什么我的评论以“排序”开头;)
标签: php mysql pdo prepared-statement placeholder