我正在尝试像查询一样进行mysqli搜索,以根据名字和姓氏进行搜索。当我在搜索中输入名字和姓氏时,我没有得到任何结果。但是,当我只键入名字或姓氏时,我会得到结果。
这是我的代码:
<?php
if (isset($_POST['search'])) {
$name = $_POST['search'];
$sql = "SELECT * FROM users WHERE fname LIKE '%$name%' OR lname LIKE '%$name%'";
$res = mysqli_query($conn, $sql);
}
while ($row = mysqli_fetch_assoc($res)) {
$fname = $row['fname'];
$lname = $row['lname'];
$city = $row['city'];
$state = $row['state'];
$id = $row['id'];
$url = '<a href ="profile/?id='.$id.'">';
if ($id !== ($_SESSION['id'])){
$pic = "SELECT profilephotopatch FROM users WHERE id = '$id'";
$res = mysqli_query($conn, $pic);
$row = mysqli_fetch_assoc($res);
$picloc = $row['profilephotopatch'];
$displaypic = '<div id="userphoto"><img src="../'.$picloc. '"style="width: 100%;max-height: 100%"></div>';
$output = $displaypic. $url. '<div id="name">'. $fname. ' '. $lname. ' '. $city. $state. '</a></div><br>';
echo ($output);
}
}
?>
提前感谢您的帮助!
答案 0 :(得分:0)
当您输入名字和姓氏时,我相信您的代码会尝试查找fname
和lname
列的全名,这当然不会给您带来结果。
例如,您将{John Doe'名称存储为fname
中的“John”和lname
列中的“Doe”。
当您使用'John'或'Doe'查看时,您会在fname
或lname
中找到它。但是使用全名,两列都没有满足标准,也没有产生任何结果。
答案 1 :(得分:0)
Mysql的LIKE构造查找类似的条目,例如&#34; LIKE&#39; bob&#39;&#34;成功回归&#39; bobbette&#39;。 &#39; bob smith&#39;不喜欢&#39; bob&#39; (它是空间,它总是不通过测试)并且不会返回一行。尝试这样的事情:
if(isset($_POST['search'])){
$names = explode(" ", $_POST['search']);
$search_fname = array_shift($names);
$search_lname = array_pop($names);
if($search_lname != ''){
$sql = "SELECT * FROM users WHERE fname LIKE '%$search_fname%' OR lname LIKE '%$search_lname%'";
} else {
$sql = "SELECT * FROM users WHERE fname LIKE '%$search_fname%' OR lname LIKE '%$search_fname%'";
}
...
}
如果您的搜索是&#34; bob smith&#34;,这将返回所有行的名字类似于&#34; bob&#34;或类似于&#34;史密斯&#34;的姓氏。可能有很多行。例如,&#34; bob jones&#34;,&#34; bob smith&#34;,&#34; dan smith&#34;都会被退回。如果你的搜索只是&#34; bob&#34;你有&#34; bob smith&#34;和#34; john bobbett&#34;你得到了这两个。这是你所期望的吗?
如果您在搜索&#34; bob smith&#34;时只想(例如)一行。那么你的查询应该是寻找AND而不是OR。
答案 2 :(得分:0)
在这里,如果我理解正确,请尝试从输入字段
爆炸valeu$search= explode(" ",$_POST['search']);
$name = $search[0];
$surname = $search[1];
$sql = "SELECT * FROM users WHERE fname LIKE '%$name%' OR lname LIKE '%$surname %'";
答案 3 :(得分:0)
尝试使用concat,您可以在要一起搜索的数据库行之间放置空引号。例如
$sql0 = "SELECT * FROM users WHERE CONCAT(`fname`, ' ', `lname`, ' ', `fname`) LIKE '%$name%' OR lname LIKE '%$name%'"
在该示例中,您可以看到fname和lname之间的空引号,以及lname和fname。这将允许搜索成功,搜索如下:
Bob Smith
或
史密斯鲍勃您将获得您正在寻找的结果。