2017-06-15 21 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またはユニークですか? –

+0

mysql_ *関数は推奨されていません。 MySQLiまたはPDOを調べる必要があります。 – Option

+3

*「証明書No: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 ." 

としてみてください

にします再び。

説明:あなたはLIKE '%$searchq%'を使用している場合は、それはすなわちPATTERN MATCHING任意の場所で1を持つ文字列を検索します。しかし、平等比較をしたい場合は、=を試してみてください。完全一致を検索します。

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拡張を使用する必要があります。

関連する問題