php - 在 PHP PDO 语句中使用多个参数
问题描述
我设置了以下语句。我用 * 替换了一长串列,以使其更具可读性。仅供参考 - 我已经知道有类似的问题。他们使用带有 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,'%')
以及上述的各种混搭。
我错过了什么?
解决方案
将百分号放在绑定中,因此您的 SQL 是这样的,未引用:
WHERE StreetName like :StreetName
然后你的绑定是这样的:
$p->bindValue(':StreetName', '%' . $StreetName . '%');
推荐阅读
- java - XGetInputFocus 的正确 JNA 映射是什么
- python - 在 Python 中使用 beautifulsoup 查找链接
- c - 如何将变量设置为由另一个指针分配和指向的相同空间量?
- git - 压缩提交的标签会发生什么?
- tensorflow - Tensorflow - 运行仅 CPU 的评估过程会限制 GPU 训练过程
- node.js - 等到 page.click 返回 true
- c++ - “T”不是参数“Derived”的有效模板参数
- javascript - Google Drive API NodeJS 示例中的回调处理
- asynchronous - 如何在 Erlang 中进行并行调用并等待所有结果?
- mongodb - 在 MongoDB Compass 中查询二进制字段