0

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

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

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

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

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

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

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

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

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

有关如何使用上述命令查询使搜索更严格的任何建议?

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

4

3 回答 3

1

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

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

于 2012-09-07T04:17:09.723 回答
1

请试试这个。还有你为什么用牙套..

$query = "SELECT userName, userID FROM user WHERE username Like '%$userName%' ";
于 2012-09-07T04:23:20.977 回答
0

考虑字符串

Apple iApple Apple Product

如果你输入Apple

喜欢 '%{$userName}%' "

Returns : will return you Apple, iApple, Apple Product
Reason :%两边都表示它会接受你的搜索词前后的任何文本

喜欢'{$userName}%'"

Returns : will return you Appleand Apple Product
Reason :%右侧表示它将接受您搜索词后的任何文本

喜欢'%{$userName}'"

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

像'{$userName}'"

Returns : will return you Apple
Reason : 否%将搜索限制为搜索词

此外

我相信您的查询应该是

  $username = mysqli_real_escape_string($userName);
  $query = "SELECT userName, userID FROM user WHERE userName Like '%{$username}%'";
于 2012-09-07T04:16:27.240 回答