我检查了类似的问题,但无法找到解决我特定问题的方法。我有一个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
但是我错误可能是因为没有正确转义字符串。您是否有可能通过给定的信息解决这个问题?
谢谢
阿尔达
答案 0 :(得分:3)
您还需要更改where子句以使用LIKE而不是=
$result = query("select * from login where userName like '%%s%'", $username)
我假设您的查询方法将使用$ username的值搜索/替换%s。要注意的是,使用“select *”会导致查询执行计划效率低下,您应该将*更改为要检索的表中的列的列表。另外,请注意SQL注入攻击。请参阅此链接http://en.wikipedia.org/wiki/SQL_injection。
答案 1 :(得分: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
答案 2 :(得分: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[%]%'
答案 3 :(得分:0)
我发现解决方案比我想象的要容易。我只是将%searchString%作为参数传递而不是普通的searchString