我是PHP的新手,并创建了一个基本的HTML表单;
<form id="game" method="get" action="results.php">
<label> Book Name
<input type="text" name="gameTitle" />
</label>
<input type="submit" name="search" value="Search">
</form>
这是我的PHP;
$gameTitle = $_GET['gameTitle'];
$gameTitle = preg_replace("#[^0-9a-z]#i", "", $gameTitle);
$sql = "SELECT games.gameTitle FROM games WHERE gameTitle LIKE '%$gameTitle%'";
$Games = mysqli_query($conn, $sql)
or die(mysqli_error($conn));
while ($row = mysqli_fetch_assoc($Games)) {
$gameTitle = $row['gameTitle'];
echo "<div>$gameTitle</div>\n";
}
mysqli_free_result($Games);
mysqli_close($conn);
?>
现在,例如,如果我要搜索一款名为“孤岛惊魂”的游戏,我只是搜索“远”,它会返回记录。但是,如果我要搜索“Far C”等(两个单词),它将不会返回记录。即使我搜索全名“孤岛惊魂”,这似乎也无效。
感谢您的帮助。
答案 0 :(得分:2)
您使用的preg_replace函数替换$gameTitle
中不是0-9或a-z的所有字符。因此,如果您搜索“孤岛惊魂”,则preg_replace会生成“FarCry”,而SQL语句将为WHERE gameTitle LIKE '%FarCry%'
..如果此单词没有标题,则不返回任何内容
答案 1 :(得分:0)
查看变量$ gameTitle。你认为你正在寻找“孤岛惊魂”,但代码,preg_replace部分,将变量设置为“FarCry”,我猜你在数据库中存储了一个名为“孤岛惊魂”的游戏,而不是“FarCry”。
答案 2 :(得分:0)
要在查询字符串中允许空格,请尝试以下操作:
$ gameTitle = preg_replace(“#[^ \ s0-9a-z] #i”,“”,$ gameTitle);
不要忘记mysql_real_escape_string函数以避免SQL注入甚至更好 使用PDO,请参阅http://php.net/manual/en/pdo.prepared-statements.php
所以简单的查询看起来像:
"SELECT games.gameTitle FROM games WHERE gameTitle LIKE '%".mysql_real_escape_string($gameTitle)."%'";