我的代码非常像数据库中的搜索引擎,用于人名。
if (isset($_POST['submit'])){
$keyword = $_POST['stats'];
$orderby = $_POST['orderby'];
if (!empty($_POST['stats'])) {
$getStats = $db->query("SELECT * FROM `stats` WHERE
`lastname` LIKE '%$keyword%' OR `firstname` LIKE '%$keyword%' OR
`nickname` LIKE '%$keyword%' ORDER BY `$orderby`
DESC");
然后将结果打印回表中,我认为表格代码不是必需且太长。
如果我只搜索姓氏或只搜索名字或昵称
,则上述查询适用但是如果数据库中有一个名为John Smith的用户 所以
名字:约翰
姓氏:史密斯
如果只是搜索“约翰”,他会被打印到表格中,如果我只是搜索“史密斯”,这是好的和相同的
但如果我搜索“约翰史密斯”,他就不会被打印到桌子上。
如何更改此查询以便实现此目的,我已尝试过:
$getStats = $db->query("SELECT * FROM `stats` WHERE
`firstname`, `lastname` = '$keyword' OR `lastname` LIKE '%$keyword%' OR `firstname` LIKE '%$keyword%' OR
`nickname` LIKE '%$keyword%' ORDER BY `$orderby`
DESC");
答案 0 :(得分:1)
WHERE CONCAT(firstname, ' ', lastname) LIKE %$keyword%
此外,您应该绑定参数而不是直接将用户输入插入到查询字符串中,您当前的代码很容易受到SQL注入。
答案 1 :(得分:0)
$keyword = str_replace(" ", "%", $keyword);
答案 2 :(得分:0)
您可以尝试REGEXP:
$keyword = $db->real_escape_string($_POST['stats']); // escape data
$orderby = $db->real_escape_string($_POST['orderby']); // escape data
$keyword = implode("|", explode(" ", $keyword));
$getStats = $db->query("SELECT * FROM stats
WHERE firstname REGEXP '$keyword'
OR lastname REGEXP '$keyword'
OR nickname REGEXP '$keyword'
ORDER BY $orderby DESC");
答案 3 :(得分:0)
试试这个
$sql = "SELECT *
FROM stats
WHERE
firstname LIKE '%$keyword%'
OR lastname LIKE '%$keyword%'
OR CONCAT_WS(' ',firstname,lastname,) LIKE '%$keyword%'
OR CONCAT_WS(' ',lastname,firstname) LIKE '%$keyword%'
OR nickname LIKE '%$keyword%'
ORDER BY $orderby DESC";