【发布时间】:2017-06-15 08:32:12
【问题描述】:
我正在尝试搜索我的网站,如果我使用会员证书搜索 no,它将显示他的完整详细信息。但是在我的代码中,当我搜索 Certificate No : 1 时,它会显示 Certificate no 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");
【问题讨论】:
-
什么是certificate_no是primerykey还是unique?
-
mysql_* 函数已弃用。你应该看看 MySQLi 或 PDO。
-
"当我搜索 Certificate No : 1 时,它会显示 Certificate No 1、10、11、12、13、14、15 的详细信息。" ...好吧,是的,这就是你告诉它做的
WHERE certificate_no LIKE '%$searchq%'- 如果你想要一个特定的证书,只需使用WHERE certificate_no = $searchq...除了将它移动到带有绑定参数的mysqli/pdo;mysql_扩展已失效,并且像这样将数据插入 SQL 是自找麻烦。 -
like 是一个模式匹配。这就是为什么它返回匹配的模式结果像这样 10, 11,12,13,14,15, .你注意到结果都有那个 1 。这是您用来匹配 '%1' 中的模式的。所以你需要使用像这样的比较运算符 certificate_no=1