首页 > 解决方案 > 占位符在准备好的语句中不起作用

问题描述

我有一个有效的查询,但是当我尝试使用准备好的语句将变量替换为占位符时,出现了问题。我在这里想念什么?

$sql = "
    SELECT t1.tbl, 
           COALESCE(t2.title, tx_ctr.Name) AS title
    FROM aux
    LEFT JOIN tx_chs
      ON t1.tbl = 't2' AND t1.rid = t2.cid  AND t2.county = :county
    LEFT JOIN tx_ctr
      ON t1.tbl = 't3' AND t1.rid = t3.id  AND t3.county = :county
    WHERE t1.tag LIKE :tag
      AND COALESCE(t2.cid, t3.ttl) IS NOT NULL
    GROUP BY title ASC";

$qtag = '"%'.$tag.'%"';

$stmt  = $db->prepare($sql);
$stmt->execute(['county' => $cnty, 'tag' => $qtag]);
$data = $stmt->fetchAll();

标签: pdo

解决方案


您错过了命名参数的“:”

您的执行语句必须如下所示:

$stmt->execute([':county' => $cnty, ':tag' => $qtag]);

推荐阅读