php中mysql查询的转义字符

php中mysql查询的转义字符,php,mysql,sql,escaping,special-characters,Php,Mysql,Sql,Escaping,Special Characters,我有一个php页面,它显示mysql表中的信息,如下所示 $query = "SELECT * FROM `diccionary` WHERE `entry` LIKE 'a%' ORDER BY `entry`"; 每个结果我都将其作为输入,用于对不同php文件进行第二次查询: $escaped = mysql_real_escape_string($row['entry']); echo "<a href=editor.php?entry=$escaped>".$row['en

我有一个php页面,它显示mysql表中的信息,如下所示

$query = "SELECT * FROM `diccionary` WHERE `entry` LIKE 'a%' ORDER BY `entry`";
每个结果我都将其作为输入,用于对不同php文件进行第二次查询:

$escaped = mysql_real_escape_string($row['entry']);
echo "<a href=editor.php?entry=$escaped>".$row['entry']."</a> |
$escape=mysql\u real\u escape\u string($row['entry']);
回声“|
此页面返回的某些te单词具有下一个格式,它们以这种方式返回:
单词1单词2
单词“
word+
字(-)

但是它们在href=editor.php?entry=$转义部分没有正确发送,实际上只有以撇号结尾的部分可以,因为我使用的是“mysql\u real\u escape\u string”函数,我尝试将其他部分转换为转义字符,但没有成功,比如(“+”、“+”、$row['entry'))。 以下是我在所有这些案例中看到的链接:

2 words=editor.php?entry=word1(没有以下空格或word2,这将返回所有与word1匹配的单词(如果有),但不是word1-word2的复合词)

word'=editor.php?entry=word\'(由于函数的原因,这是正确的,它还返回了正确的单词)

word+=editor.php?entry=word+(应该转义+,因为如果我单击生成的链接,它不会给我任何结果,空白页)

word(-)=editor.php?entry=word(这类似于2个单词的情况,除了它还有应该转义的括号外,这个括号还生成空白页)

我一直在四处寻找,我只能找到修复撇号的方法,我不知道如何修复其余的情况,任何帮助都是有价值的

非常感谢。

试试urlencode($row['entry']);
方法可能有用。

但在url中发送转义数据的建议不是一个好的做法。

您需要对数据进行url编码,以便输出到HTML href属性中

$query_string = urlencode($row['entry']);
echo "<a href=editor.php?entry=$query_string".$row['entry']."</a> |
$query\u string=urlencode($row['entry']);

echo“为什么要在mysql结果上使用mysql\u real\u escape\u字符串?不应该在URL中向客户端发送转义数据。sql转义用于sql语句,而不是http URL。sql转义是在将特定字符串插入sql语句之前对其执行的最后一项操作。你从来没有做过这样的事情,你希望逃逸不会被所有的中间系统破坏。@Prashank,因为我生成的链接。@Marc B,对不起,我不是专家,我是按照我发现的方式来做的,请给我建议一个更好的方法来学习和应用它。你不需要吗?这一半奏效了,我的意思是,ti在所有一开始不起作用的情况下都能工作,但它不适用于撇号,我试过:$preesc=urlencode($row['entry')$esc=mysql\u real\u escape\u字符串($row['entry']);但是它没有解决问题,有什么建议吗?现在你可以试试rawurlencode()参考这个你会有一些想法。正如你在上面看到的@Avneesh给了我同样的解决方案,请检查我回答了什么,我如何解决这个问题?有什么建议吗?@AndrésChandía似乎你还在尝试使用
mysql\u real\u escape\u string()
以某种方式输出到浏览器。您应该只使用URL编码
mysql\u real\u escape\u string()
仅用于mysql查询的输入。是的@Mike Brant,我不知道怎么做,我正在寻找更好的方法,但我不太明白我该怎么做。在你提出了所有建议之后,我已经找到了一个解决方案,我不确定这是否是一个好的解决方案,毕竟你的评论,所以我把它放在这里,我等待你的评论来改进这一点,再次感谢:好的,在你的所有建议之后,我已经找到了一个解决方案,我不确定这是一个好的解决方案,在你的所有评论之后,我把它放在这里,我等待你的评论来改进这一点,再次感谢:$preescaped=
mysql\u real\u escape\u string($row['entry')$转义=urlencode($preescaped);回显“.$row['entry']”
@AndrésChandía我仍然不明白为什么你认为你需要使用
mysql\u real\u escape\u string()
。您只需使用
urlencode()
即可。同样,MySQL字符串转义函数是在准备用于数据库查询的字符串时使用的,而不是在准备用于URL的字符串时使用的。