Php SQL中的转义引号和百分号
我检查了类似的问题,但找不到任何解决我特定问题的方法。我有一个PHP方法,我使用如下:Php SQL中的转义引号和百分号,php,sql,escaping,Php,Sql,Escaping,我检查了类似的问题,但找不到任何解决我特定问题的方法。我有一个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 * fro
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
然而,我得到的错误可能是由于没有正确转义字符串。你们中有人能用已知的信息来解决这个问题吗
谢谢
arda您可以尝试更改此“'%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
您可以尝试更改此“'%1!'”
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
您还需要将where子句更改为使用LIKE而不是where=
$result = query("select * from login where userName like '%%s%'", $username)
我假设您的查询方法将用$username的值搜索/替换%s。需要注意的一点是,使用“select*”会导致查询执行计划效率低下,您应该将*更改为要检索的表中的列列表。此外,请注意SQL注入攻击。请参阅此链接。您还需要将where子句更改为使用LIKE而不是=
$result = query("select * from login where userName like '%%s%'", $username)
我假设您的查询方法将用$username的值搜索/替换%s。需要注意的一点是,使用“select*”会导致查询执行计划效率低下,您应该将*更改为要检索的表中的列列表。此外,请注意SQL注入攻击。请参阅此链接。转义引号和转义百分号是两个不同的问题 首先是引用。不好的方法是“引用引用”,即用两个单引号替换所有单引号。这是可行的,但也有缺点。更好的方法是使用查询参数。我不使用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[%]%'
转义引号和转义百分号是两个不同的问题 首先是引用。不好的方法是“引用引用”,即用两个单引号替换所有单引号。这是可行的,但也有缺点。更好的方法是使用查询参数。我不使用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[%]%'
我发现解决办法比我想象的要容易。我只是将%searchString%作为参数传递,而不是普通的searchString。我发现解决方案比我想象的要简单。我只是将%searchString%作为参数传递,而不是普通的searchString看起来这里有多余的单撇号。看起来这里有多余的单撇号。