Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP搜索显示多个结果_Php_Mysql_Search - Fatal编程技术网

PHP搜索显示多个结果

PHP搜索显示多个结果,php,mysql,search,Php,Mysql,Search,我正在尝试对我的网站进行搜索,如果我搜索会员证书没有,它将显示他的全部详细信息。但在我的代码中,当我搜索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_q

我正在尝试对我的网站进行搜索,如果我搜索会员证书没有,它将显示他的全部详细信息。但在我的代码中,当我搜索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");

您使用了错误的通配符Use=或only like或Use RLike

SELECT * FROM  certificate  WHERE certificate_no LIKE '$searchq'
SELECT * FROM  certificate  WHERE certificate_no = '$searchq'
SELECT * FROM  certificate  WHERE certificate_no RLike '[[:<:]]$searchq[[:>:]]'
更改您的查询:

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

然后再试一次


说明:当您使用“%$searchq%”这样的字符串时,它将在任何位置搜索具有1的字符串,即模式匹配。但是,如果您想进行相等比较,请尝试=。它将搜索精确匹配。

尝试如下编辑$query::

$query = mysql_query("SELECT * FROM  certificate  WHERE certificate_no LIKE $searchq ") or die ("could not search "); 
Like是一种模式匹配。它将搜索列中的给定字符串。这就是它返回匹配模式结果的原因,如10、11、12、13、14、15。您是否注意到结果都是1。用于匹配“%1%”中的模式。因此,您需要使用类似于此证书的比较运算符

警告mysql\u查询、mysql\u获取\u数组、mysql\u连接等。。扩展在PHP5.5.0中被弃用,在PHP7.0.0中被删除。 相反,应该使用MySQLi或PDO_MySQL扩展


什么是证书?否为primerykey或唯一?mysql?函数已弃用。您应该查看MySQLi或PDO。当我搜索证书编号1时,它会显示证书编号1、10、11、12、13、14、15等的详细信息。。。好的,是的,这就是您告诉它在证书号像“%$searchq%”的地方要做的-如果您想要一个特定的证书,只需使用WHERE certificate\u no=$searchq。。。除了使用绑定参数将其移动到mysqli/pdo;mysql_uu扩展已经失效,向SQL插入数据会带来麻烦。like是一个模式匹配。这就是为什么它会返回匹配的模式结果,比如10,11,12,13,14,15。你注意到结果都是1吗。用于匹配“%1”中的模式。因此,您需要使用类似于此证书的比较运算符
$query = mysql_query("SELECT * FROM  certificate  WHERE certificate_no LIKE $searchq ") or die ("could not search ");