0

我检查了类似的问题,但找不到针对我的特定问题的任何解决方案。我有一个 PHP 方法,我使用如下:

SELECT * FROM login WHERE userID = 10  //To get this 

$result = query("SELECT * FROM login WHERE userID = '%d' ", $userID) //I use this

所以字符集 '%d' 被我在 $userID 中发布的内容替换,结果以 JSON 形式返回。现在我正在尝试将其用于搜索功能。

select * from login where userName like '%searchString%'  //Now to get this

$result = query("SELECT * FROM login WHERE userName LIKE '%'%s'%'", $username) // I am trying this

但是我得到错误可能是由于没有正确转义字符串。你们中的任何人都可以用给定的信息解决这个问题吗?

谢谢

阿尔达

4

4 回答 4

3

您还需要更改 where 子句以使用 LIKE 而不是 =

$result = query("select * from login where userName like '%%s%'", $username)

我假设您的查询方法将使用 $username 的值搜索/替换 %s。需要注意的是,使用“select *”会导致查询执行计划效率低下,您应该将 * 更改为要检索的表中的列。另外,请注意 SQL 注入攻击。请参阅此链接http://en.wikipedia.org/wiki/SQL_injection

于 2013-05-24T22:10:27.317 回答
1

您可以尝试更改此 '%'%s'%'

select * from login where userName like '%searchString%'  //Now to get this


$username=mysql_real_escape_string($username);
$result = query("SELECT * FROM login WHERE userName = '%%s%'", $username) // I am trying this
于 2013-05-24T22:10:00.017 回答
0

转义引号和转义百分比符号是两个不同的问题。

首先是引号。不好的方法是“引用引号”,即用两个单引号替换所有单引号。它有效,但也有缺点。更好的方法是使用查询参数。我不使用 php,所以我不知道所有细节,但我在 StackOverflow 上阅读了很多评论和答案,告诉 php 用户使用准备好的语句。他们可能会也可能不会转义引号。我的猜测是他们这样做。

对于百分号,您必须用方括号将它们括起来,以防止它们被视为通配符。例如,如果您的 where 子句是:

where somefield like '75%'

你希望它返回

75% of bus passengers like singing

但不返回

75 bottles of beer on the wall

那么你的 where 子句必须是:

where somefield like '75[%]%'
于 2013-05-24T23:04:58.457 回答
0

我发现解决方案比我想象的要容易。我只是将 %searchString% 作为参数而不是普通的 searchString

于 2013-05-25T21:52:08.850 回答