2017-06-15 98 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擴展。