使用内部搜索PHP过滤MySQL数据库的问题

时间:2015-06-03 23:07:07

标签: php mysql

我正在尝试让这个搜索框能够过滤掉我制作的一个虚拟数据库,但是当我尝试在网站上的搜索框中搜索时,它会给我一个错误:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '= ''' at line 1

我感觉MySQL查询没有正常工作,因为" SELECT * FROM表WHERE City =搜索的内容"听起来不对我。

<?php

mysql_connect("***","******","*****") or die(mysql_error());
mysql_select_db("*****");

$sql = "SELECT * FROM Table";

if (isset($_POST['search'])) {

    $search_term = mysql_real_escape_string($POST['search_box']);

    $sql .= "WHERE City = '{$search_term}'";


}




$query = mysql_query($sql) or die(mysql_error());


?>
<form name='search' method="POST" action="test.php" >

Search: <input type="text" name="search_box" value="">
<input type="Submit" name="search" value="Search the table...">

</form>

<table width="70%">
<tr>
    <td><strong>City</strong></td>
    <td><strong>Country</strong></td>
    <td><strong>Climate</strong></td>
    <td><strong>Company</strong></td>
    <td><strong>Activities</strong></td>
    <td><strong>Continent</strong></td>
    <td><strong>Terrain</strong></td>
</tr>
<?php while ($row = mysql_fetch_array($query)) { ?>
<tr>
    <td><?php echo $row['City']; ?></td>
    <td><?php echo $row['Country']; ?></td>
    <td><?php echo $row['Climate']; ?></td>
    <td><?php echo $row['Company']; ?></td>
    <td><?php echo $row['Activities']; ?></td>
    <td><?php echo $row['Continent']; ?></td>
    <td><?php echo $row['Terrain']; ?></td>
</tr>
<?php } ?>
</table>

感谢。

2 个答案:

答案 0 :(得分:1)

你有一个错字。这样:

$POST['search_box']

应该是这样的:

$_POST['search_box']

这意味着您要创建一个空变量($search_term)。如果你有错误报告,你会看到这个。下次开发时,将它放在脚本的顶部:

ini_set('display_errors', 1);
error_reporting(-1); // or you could use E_ALL

最后但并非最不重要的是,在WHERE

之前需要一个空格
$sql .= " WHERE City = '{$search_term}'";

备注

您的搜索查询还需要注意的一件事。您只会在提交的搜索查询中找到完全匹配。您最好坚持使用最佳做法并使用LIKE进行搜索:

$sql .= " WHERE City LIKE '%{$search_term}%'";

答案 1 :(得分:0)

确保正确命名$ _POST变量,并且在WHERE子句之前有一个空格。试试这个:

$sql = "SELECT * FROM Table";

if (isset($_POST['search_box'])) {

    $search_term = mysql_real_escape_string($POST['search_box']);

    $sql .= " WHERE City = '{$search_term}'";


}