Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php SQL中的转义引号和百分号_Php_Sql_Escaping - Fatal编程技术网

Php SQL中的转义引号和百分号

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

我检查了类似的问题,但找不到任何解决我特定问题的方法。我有一个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
然而,我得到的错误可能是由于没有正确转义字符串。你们中有人能用已知的信息来解决这个问题吗

谢谢


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

看起来这里有多余的单撇号。看起来这里有多余的单撇号。