我正在尝试搜索我的网站,如果我使用会员证书进行搜索,则不会显示其详细信息。但是在我的代码中,当我搜索证书号码:1时,它会显示证书编号1,10,11,12,13,14,15 ......的详细信息。
有没有办法显示单个会员的详细信息。
if(isset($_POST['search'])){
$searchq = $_POST['search'];
$searchq = preg_replace("#[^0-9a-z]#i","",$searchq);
$query = mysql_query("SELECT * FROM certificate WHERE certificate_no LIKE '%$searchq%' ") or die ("could not search ");
}
$count = mysql_num_rows($query);
if($count==0){
$output = 'There is no search result ';
} else {
while ($row = mysql_fetch_array($query)){
$name =$row['name'];
$certificate_no =$row['certificate_no'];
$y_of_passing =$row['y_of _passing'];
$grade =$row['grade'];
$score =$row['score'];
$output.='<div>Certificate Number : ' .$certificate_no.' <div>Candidate Name : '.$name. '<div>Grade/Score : ' .$grade.' <div>Course Name : '.$score. '<div>Year Of Passing: '.$y_of_passing.'<div>';
echo "<img src ='".$row['photo']."' height='100' width='200' >" ;
}
}
print("$output");
答案 0 :(得分:0)
您使用了错误的通配符使用=或仅使用或使用RLike
SELECT * FROM certificate WHERE certificate_no LIKE '$searchq'
SELECT * FROM certificate WHERE certificate_no = '$searchq'
SELECT * FROM certificate WHERE certificate_no RLike '[[:<:]]$searchq[[:>:]]'
答案 1 :(得分:0)
更改您的查询:
$query = mysql_query("SELECT * FROM certificate WHERE certificate_no LIKE '%$searchq%' ")
到
$query = mysql_query("SELECT * FROM certificate WHERE certificate_no = ". $searchq ."
再试一次。
说明:当您使用LIKE '%$searchq%'
时,它会在任意位置搜索1
的字符串,即PATTERN MATCHING
。但是如果你想要平等比较而不是尝试=
。它将搜索完全匹配。
答案 2 :(得分:0)
尝试像这样编辑$ query <:
$query = mysql_query("SELECT * FROM certificate WHERE certificate_no LIKE $searchq ") or die ("could not search ");
答案 3 :(得分:0)
Like
是模式匹配。它将搜索列中的给定字符串。这就是为什么它返回匹配的模式结果,如10, 11,12,13,14,15
。你注意到结果都有1
。您用来匹配like '%1%'
中的模式。所以你需要使用比较运算符,如certificate_no=1
警告mysql_query,mysql_fetch_array,mysql_connect等..扩展在PHP 5.5.0中已弃用,并且已在PHP 7.0.0中删除。 相反,应该使用MySQLi或PDO_MySQL扩展。