【问题标题】:PHP sql statement to search databse for user namesPHP sql语句在数据库中搜索用户名
【发布时间】:2012-09-07 04:10:10
【问题描述】:

我正在尝试构建一个 sql 查询来搜索我的数据库中的用户。它应该帮助用户在我的网站上找到其他用户来寻找朋友。

我做了一些研究,因为我知道我不想要:

$query = "SELECT userName, userID FROM user WHERE userID = $userName ";

因为如果他们必须输入用户的确切姓名才能找到他们,这将不是一个有效的搜索。

在做了一些研究后,我决定尝试使用前后带有 % 符号的类似术语,这样它就可以是在名称之前或之后加上数字的名称。

我在网上找到的例子是这样格式化的:

$query = "SELECT userName, userID FROM user WHERE userID Like '%{$userName}%' ";

但是当我在我的网站上执行此查询时,我遇到了返回许多结果的问题。它返回的结果不包含我的搜索词中的任何内容。

我也尝试了上面不带括号的搜索查询,因为我不明白为什么需要它们,但我得到了相同的结果。

关于如何使用上述命令查询使搜索更严格一些建议?

或者关于我应该如何搜索我的数据库以查找用户朋友的任何其他建议?

【问题讨论】:

  • 您的 LIKE 子句中有用户 ID,而您要匹配的变量是 $userName。为什么会这样?它应该是 WHERE Username LIKE '%$userName%' 我不知道你为什么有在 $userName 周围使用大括号。
  • 别忘了Bobby Tables
  • @techie_28 我认为您的更改会破解它。 Def 需要将其设为 userName 而不是 userID。但我仍然得到如上所述的结果。
  • % 这是通配符@Mike。如果用它包装变量,那么它将搜索一个整体。但是,如果你想从头开始搜索,那么你可以使用'$username%' .它将匹配以该用户名开头的记录,例如“mike%”将获取“mike”、“mike.tyson187”、“mike_lewis02”等。这不是你需要的吗?

标签: php sql search


【解决方案1】:

% sign 用于通配符。因此,如果$userName = 'apple' 您的查询将匹配appleapplepiecrabapple,但不匹配appl

如果您想要完全匹配,请删除 %s 或 LIKE。

【讨论】:

    【解决方案2】:

    请试试这个。还有你为什么要使用大括号..

    $query = "SELECT userName, userID FROM user WHERE username Like '%$userName%' ";
    

    【讨论】:

    • 正如我的问题中所述,我已经尝试过没有括号。
    【解决方案3】:

    考虑字符串

    Apple iApple Apple Product

    如果你输入Apple

    点赞“%{$userName}%”“

    返回:将返回您AppleiAppleApple Product
    原因:两边的% 表示它会接受任何搜索词前后的文字

    点赞“{$userName}%”“

    返回:将返回AppleApple Product
    原因:右侧的% 表示它将接受您搜索后的任何文本术语

    点赞“%{$userName}”“

    返回:将返回AppleiApple
    原因:左侧的% 表示它将接受您搜索之前的任何文本术语

    点赞“{$userName}”“

    返回:将返回您 Apple
    原因:否 % 将搜索限制为搜索词

    进一步了解

    我相信您的查询应该是

    $username = mysqli_real_escape_string($userName); $query = "SELECT userName, userID FROM user WHERE userName Like '%{$username}%'";

    【讨论】:

    • 我正在这样做:$queryF = "SELECT userName, userID FROM user WHERE userName Like '%{$userName}%'";它返回了很多不应该的名字
    • 你的搜索是什么,结果是什么。你能把它们贴出来吗?
    • 使用这个查询: $queryF = "SELECT userName, userID FROM user WHERE userName Like '%{$userName}%' ";我搜索:Mark 我得到:hoppy test jason Bekka Mark 等,包括其他根本没有名字标记的人。
    • 你确定只有这个查询被执行吗?打印查询本身并查看正在执行的实际查询。
    • 是的,只有那个查询正在执行。我认为这是 php 中的格式问题,因为我将其更改为相等并取出 % 并将其设为 = 并且仅在我准确输入时才返回名称
    猜你喜欢
    • 1970-01-01
    • 2010-09-23
    • 2018-12-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多