首页 > 解决方案 > 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'])."%') 

该脚本从搜索一列数据开始。我需要它来搜索姓名、地址、城市、州、邮编列。我希望能够搜索街道和邮编并查看所有结果。或者名字和城市。只是任何组合。

标签: phpmysql

解决方案


您可以从多个列形成一个连接字符串,并将其与您的搜索模式进行比较。

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));
}

推荐阅读