php - MySQL中同时查询多个列
问题描述
我正在尝试将我在网上找到的脚本转换为从众多列而不是一个列中搜索数据。我的代码的问题是它只会从一列中获取数据。它会在我键入时搜索并关注所有列,但如果我使用两个词,它们必须在同一列中才能显示。
这是脚本中的原始查询。
WHERE webslesson_post_title LIKE "%'.str_replace(' ', '%', $_POST['query']).'%"
这是我的调整。
WHERE (Name LIKE '%".str_replace(' ', '%', $_POST['query'])."%' OR Address LIKE '%".str_replace(' ', '%', $_POST['query'])."%' OR City LIKE '%".str_replace(' ', '%', $_POST['query'])."%' OR State LIKE '%".str_replace(' ', '%', $_POST['query'])."%' OR ZIP LIKE '%".str_replace(' ', '%', $_POST['query'])."%')
该脚本从搜索一列数据开始。我需要它来搜索姓名、地址、城市、州、邮编列。我希望能够搜索街道和邮编并查看所有结果。或者名字和城市。只是任何组合。
解决方案
您可以从多个列形成一个连接字符串,并将其与您的搜索模式进行比较。
WHERE CONCAT_WS(' ', Name, Address, City, State, Zip) LIKE ?
这显示了使用参数占位符。建议这样做,因为它避免了所有复杂的字符串连接,而且更安全。
像这样在 PHP 中运行它:
$sql = "SELECT ...full query... ";
$search = "%" . str_replace(' ', '%', $_POST['query']) . "%";
if (($stmt = $pdo->prepare($sql)) !== false) {
if ($stmt->execute( [ $search ] ) !== false) {
$result = $stmt->fetchAll();
} else {
error_log(print_r($stmt->errorInfo(), true));
}
} else {
error_log(print_r($pdo->errorInfo(), true));
}
推荐阅读
- c# - 使用异步查询多个 MySQL 实例 - 分片环境
- node.js - Docker 撰写错误以将 postgres 数据库与 Node API 连接
- javascript - 如何使用 array_column 创建目录
- vb.net - 删除 Visual Basic Web API 控制器中的 API 路径
- java - 如何从另一个 Maven 模块启动 Spring Boot 应用程序?
- java - Spring Cloud Gateway:不路由请求,最终遇到413请求实体太大
- java - Java Spring Boot 登录时出现多页重定向问题
- javascript - 为什么我不能在 Phaser 3 JS 中绘制矩形?
- javascript - 在 Windows 上设置 npm 时一直卡住
- apache-ranger - 外部用户无法通过 Ranger Admin UI 登录