无法使用 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 更短
我已经与这段代码作斗争有一段时间了,需要一些建议。我创建了一个 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 更短