2017-06-15 139 views
0

我想搜索我的网站,如果我搜索会员证书没有,它会显示他的全部细节。但在我的代码中,当我搜索证书编号:1时,它显示证书的详细信息编号为1,10,11,12,13,14,15,....PHP搜索显示多个结果

是否有任何方法显示单个成员的详细信息。

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

什么是certificate_no是primerykey还是unique? –

+0

mysql_ *函数已被弃用。你应该看看MySQLi或PDO。 – Option

+3

*“当我搜索证书编号:1时,会显示证书编号为1,10,11,12,13,14,15的详细信息,”* ...呃,是的,这就是您告诉它要做的事情'WHERE certificate_no LIKE'%$ searchq%'' - 如果你想要一个特定的证书,只需使用'WHERE certificate_no = $ searchq' ...除了将其移动到具有绑定参数的mysqli/pdo; mysql_'扩展名已经失效,并且将数据插入到SQL中,就像是在寻找麻烦。 – CD001

回答

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[[:>:]]' 
0

更改您的查询:

$query = mysql_query("SELECT * FROM certificate WHERE certificate_no LIKE '%$searchq%' ") 

$query = mysql_query("SELECT * FROM certificate WHERE certificate_no = ". $searchq ." 

,并尝试再次。

说明:如果您使用的是像'%$searchq%'然后它会搜索具有1在任何地方,即PATTERN MATCHING的字符串。但是,如果你想要比尝试=平等比较。它将搜索完全匹配。

0

尝试编辑$这样的查询:::

$query = mysql_query("SELECT * FROM certificate WHERE certificate_no LIKE $searchq ") or die ("could not search "); 
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扩展。