0

我设置了以下语句。我用 * 替换了一长串列,以使其更具可读性。仅供参考 - 我已经知道有类似的问题。他们使用带有 SINGLE 参数的 SINGLE 选择语句。不知何故,这是不同的。

$sql = <<<EOM 
SELECT *
    FROM table1
    WHERE StreetName like '%:StreetName_Coml%'
    UNION
    
SELECT *
    FROM table2
    WHERE StreetName like '%:StreetName_Coms%'
    UNION
    
SELECT *
    FROM table3
    WHERE StreetName like '%:StreetName_Farm%'
    UNION
    
SELECT *
    FROM table4
    WHERE StreetName like '%:StreetName_Land%';
EOM;

$p = $db->prepare($sql);

$StreetName = 'tree'
    
$p->bindValue(':StreetName_Coml', $StreetName);
$p->bindValue(':StreetName_Coms', $StreetName);
$p->bindValue(':StreetName_Farm', $StreetName);
$p->bindValue(':StreetName_Land', $StreetName);

$p->execute();

$data = $p->fetchAll(PDO::FETCH_ASSOC);

查询运行,没有 PHP 错误。但我没有得到任何结果。我应该取回 100 行。当我在我的数据库浏览器中运行相同的查询时,我得到了 100 行。绑定参数的方式有一些不起作用。

我尝试了以下方法:

  • bindParam 而不是 bindValue
  • 将“%”从 SQL 语句移到 $StreetName。所以不是 'tree' 它是 '%tree%'
  • 使用 CONCAT 语句,例如“WHERE StreetName like CONCAT('%',:StreetName_Land,'%')

以及上述的各种混搭。

我错过了什么?

4

1 回答 1

0

将百分号放在绑定中,因此您的 SQL 是这样的,未引用:

WHERE StreetName like :StreetName

然后你的绑定是这样的:

$p->bindValue(':StreetName', '%' . $StreetName . '%');
于 2021-02-25T21:59:58.277 回答