首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP关键字搜索不处理多个单词

问PHP关键字搜索不处理多个单词
EN

Stack Overflow用户
提问于 2014-11-24 15:12:53
回答 3查看 506关注 0票数 1

我对PHP很陌生,并创建了一个基本的HTML表单;

代码语言:javascript
复制
<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;

代码语言:javascript
复制
$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);

?>

例如,如果我要搜索一个名为“远哭”的游戏,而我只搜索了“远”,它就会返回记录。然而,如果我要搜索‘远C’等(两个词),它将不会返回记录。即使我搜索全名“Far Cry”,也会发生这种情况,似乎不起作用。

谢谢你的帮助。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-11-24 15:21:25

您使用的preg_replace函数替换了$gameTitle中不是0-9或a的所有字符。因此,如果您搜索"Far Cry“,preg_replace make "FarCry”和SQL语句将是WHERE gameTitle LIKE '%FarCry%'。如果没有这个单词的标题,它将什么也不返回。

票数 2
EN

Stack Overflow用户

发布于 2014-11-24 15:23:41

看看变量$gameTitle。您认为您在寻找"Far Cry“,但是代码preg_replace部件将变量设置为"FarCry”,我猜您在数据库中存储了一个名为"Far Cry“的游戏,而不是"FarCry”。

票数 0
EN

Stack Overflow用户

发布于 2014-11-24 15:43:00

  1. 若要允许查询字符串中的空格,请尝试如下: $gameTitle = preg_replace("#^\s0-9a-z#i","",$gameTitle);
  2. 不要忘记mysql_real_escape_string函数以避免SQL注入,甚至更好地使用PDO,参见http://php.net/manual/en/pdo.prepared-statements.php的示例。

因此,简单的查询如下:

代码语言:javascript
复制
"SELECT games.gameTitle FROM games WHERE gameTitle LIKE '%".mysql_real_escape_string($gameTitle)."%'";
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27108027

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档