我需要在数据库中搜索特定的记录

时间:2014-07-30 06:24:08

标签: php mysql

我有一个名为"学生"和一个名为" stud_info"包含学生信息,例如" indexno" "名称" " studresults&#34 ;.我想仅使用索引编号搜索学生的详细信息。我尝试使用我在互联网上找到的示例来做到这一点,但它仅从关键字进行搜索。

有没有办法只使用#34; indexno"来搜索数据库表?


+----+---------+--------+-------------+
| id | indexno | name   | studresults |
+----+---------+--------+-------------+
|  1 |  123456 | Andrew | Pass        |
|  2 |  125845 | John   | Pass        |
|  3 | 2258996 | Kevin  | Pass        |
|  4 | 1258896 | Emily  | Pass        |
+----+---------+--------+-------------+

这是代码,

index.php文件

<form action="search.php" method="GET">
        <input type="text" name="query" />
        <input type="submit" value="Search" />
    </form>

search.php文件

<?php
    mysql_connect("localhost", "root", "root") or die("Error connecting to database: ".mysql_error());


    mysql_select_db("students") or die(mysql_error());

?>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>

<?php
    $query = $_GET['query']; 


    $min_length = 3;

    if(strlen($query) >= $min_length){ 

        $query = htmlspecialchars($query); 

        $query = mysql_real_escape_string($query);

        $raw_results = mysql_query("SELECT * FROM stud_info
            WHERE (`indexno` LIKE '%".$query."%')") or die(mysql_error());


        if(mysql_num_rows($raw_results) > 0){ 

            while($results = mysql_fetch_array($raw_results)){


                echo "<p>Index No:".$results['indexno']."<br />Name:".$results['name']."<br />Results:".$results['studresults']."</p>";

            }

        }
        else{ 
            echo "No results";
        }

    }
    else{ 
        echo "Minimum length is ".$min_length;
    }
?>

</body>
</html>

4 个答案:

答案 0 :(得分:1)

您不需要LIKE,但比较器=(完全等于)。

所以你的WHERE - 子句应该是这样的:

WHERE (`indexno` = '".$query."')

LIKE确实提供了一种与通配符(%)松散匹配的方法。所以,如果你写:

`indexno` LIKE '%96'

您将获得包含以下indexno的记录:

  

22589的 96
  12588的 96

因为两者都以96结尾,而96之前的通配符告诉LIKE比较器,只要它们以{{1}结尾,所有内容都可以位于比较值的开头}。

在你的情况下,匹配更松散,因为你在字符串的开头和结尾都有一个通配符。因此,如果您输入96,则2子句如下:

LIKE

将匹配您提供的示例数据的每条记录,因为字符串LIKE '%2%' 之前和/或之后可能存在任何内容。对于每条记录都是如此,因为每条记录至少包含一个2

答案 1 :(得分:0)

这样做:
在index.php文件中:

<form action="search.php" method="POST">
        <input type="text" name="query" />
        <input type="submit" value="Search" />
    </form>

在search.php文件中只需更改:

$query = $_POST['query'];

让我知道这些变化之前和之后的结果。

答案 2 :(得分:0)

正确替换您的数据库名称 您已创建数据库作为学生并已插入

mysql_select_db("stud_info") or die(mysql_error()); 

首先将其更改为

mysql_select_db("students") or die(mysql_error()); 

答案 3 :(得分:-3)

您正在使用&#34; Like&#34;进行模式搜索。语法使用&#34; =&#34;在您的查询中

这就是你的QUERY&#34; SELECT * FROM结果,其中indexno =&#34;。$ query