无法使用 LIKE 使用 php 从 mysql 中提取数据

Cant use LIKE to extract data from mysql using php

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

<!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);
?>

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

目前您在查询中传递点,因此您不是搜索 example,而是向数据库询问名称或描述中包含 .example. 的行。

改变

$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 将通过避免 "OR".

使您的 sql 更短