不能使用LIKE使用php从mysql中提取数据

时间:2015-02-11 10:21:31

标签: php mysql sql-like

我一直在与这段代码作斗争,并且可以提供一些建议。我在表单中创建了一个计算机游戏的mysql数据库和一个简单的搜索框和按钮。如果我输入关于游戏名称或其描述的任何关键词,php应该在下拉中回显结果(因为可能有多个'命中')。目前,我只是在页面底部显示结果。我的查询愉快地运行了else语句并向我展示了所有提供的游戏,但是当我输入搜索条件并且没有错误消息时,我没有得到任何结果。 print_r($ q)也画了一个空白。出了什么问题? NB。我现在不太担心代码注入 - 一次只有1个婴儿步骤!非常感谢

<!DOCTYPE HTML>
<HTML>
<head></head>

<?php
//Connect to the Database
$dbhost = "localhost";
$dbuser = "root";
$dbpass = "Secret";
$dbname = "gaming";

//Create connection
$conn = mysqli_connect($dbhost,$dbuser,$dbpass,$dbname);

// Show error if connection fails
if (!$conn){ 
    die("Connection failed: " .
        mysqli_connect_error());
}

if(isset($_REQUEST['submit'])){
    $search=$_POST['search'];
    $sql="SELECT* FROM gamestbl WHERE game_name LIKE '%.$search.%' OR game_description LIKE '%.$search.%'";
    $q=mysqli_query($conn,$sql);
}
else{
    $sql="SELECT* FROM gamestbl";
    $q=mysqli_query($conn,$sql);
}
?>

<body>
<form method="post">
    <table width="200" border="1">
  <tr>
    <td>Search</td>
    <td><input type="text" name="search" value="" /></td>
    <td><input type="submit" name="submit" value=" Find " /></td>
  </tr>
</table>
</form>
<table>
    <tr>
        <td>Game ID</td>
        <td>Game Name</td>
        <td>Game Description</td>
        <td>Game Genre</td>
        <td>Game Price</td>
    </tr>

<?php
print_r($q);
while($res=mysqli_fetch_array($q)){
?>
<tr>
    <td><?php echo $res['game_id'];?></td>
    <td><?php echo $res['game_genre'];?></td>
    <td><?php echo $res['game_name'];?></td>
    <td><?php echo $res['game_description'];?></td>
    <td><?php echo $res['game_price'];?></td>
</tr>
    <?php }?>
</table>

</body>
</html>
<?php
// get rid of data in cache and close
    mysqli_close($conn);
?>

2 个答案:

答案 0 :(得分:1)

而不是'%.$search.%'你必须使用'%$search%'(注意跳过点)。甚至更好(在我看来)'%".$search."%'

目前,您在查询中传递了点,因此您不是要搜索example,而是要求数据库查找名称或说明为.example.的行。

答案 1 :(得分:1)

更改

$sql="SELECT* FROM gamestbl WHERE game_name LIKE '%.$search.%' OR game_description LIKE '%.$search.%'";

有关

$search = mysql_real_escape_string($search); // Prevent from injection
$sql = sprintf("SELECT * FROM gamestbl WHERE concat(game_name, game_description) LIKE '%s'", '%' . $search . '%');

sprintf是在字符串中添加变量的更好方法,concat会通过避免&#34; OR&#34;来缩短你的sql。