在 2 列 mySQL/PHP 中查找带有选择的文本


Find text with select in 2 columns mySQL/PHP

我正在制作一个自动完成表单并从我的数据库中请求名称。这是我数据库中的表

user_id | firstname | lastname

我可以使用这个获取"搜索词"的数据

$query = "SELECT user_id, firstname, lastname FROM users WHERE   firstname like :searchterm  ";

但我想扩展它,以便我也可以同时搜索名字和姓氏,例如,搜索"John D..."。我认为有一种方法可以连接两列,然后进行搜索。有人可以解释一下吗?我只是从这个mysql开始。

当搜索词中有空格时,通常需要先将字符串拆分为多个部分,然后再将其放入查询中。如果要匹配所有输入的搜索词,请使用 AND;如果要匹配任何搜索词,请使用OR。例:

Search: john james smith

<?php
$search = "john james smith";
$bits = explode(" ", $search);
foreach($bits as $key => $bit) {
    $bits[$key] = '(`field1` LIKE "' . $bit . '" AND `field2` LIKE "' . $bit . '")';
}
$sql = implode(' OR ', $bits);
// (`field1` LIKE "john" AND `field2` LIKE "john") OR (`field1` LIKE "james" AND `field2` LIKE "james") OR (`field1` LIKE "smith" AND `field2` LIKE "smith")
?>

演示:https://eval.in/66808

看起来您使用的是 PDO(这很好),因此您只需要将绑定参数放入该字符串中,然后在当前 SQL 查询结束时将其连接到 WHERE 子句中。