我应该一个一个地转义输入参数还是将sql查询作为一个整体转义?


Should I escape the input parameters one by one or escape the sql query as a whole?

我经常一个接一个地转义输入,我想知道两种方法之间的区别。哪一个是更常见的做法?我首先尝试转义"要求转义"的字段,然后我为每个值编写了很长的转义代码。一次转义整个sql语句有什么缺点?

它不起作用,因为在查询中你使用的东西像'单引号来指示值,你不希望那些转义,但你想转义可能包含单引号的值。

有点离题,但我觉得这很重要。

这不是你第一次问这个问题了。看来你还是没明白我的意思。

你确定mysql不接受转义SQL字符串吗?

对不起,这个问题似乎是你的主要问题。
而不是寻求理解,而不是寻求解释,你只是在要求某种肯定的答案。

这个问题的结果应该是你给自己的答案,基于你对这件事的理解。只有在这种情况下,它才会对你有好处。否则你会在下一步中再次绊倒。

请试着理解转义字符串的含义。
你的问题对任何有基本SQL知识的人来说都毫无意义。当然,这样的整个查询转义永远不会起作用。只是因为SQL查询的性质。
您迫切需要来理解的这种性质。请读一些书。求你了,求你解释,而不是求你保证。

使用准备好的语句并使用bind参数。其他任何事情都是等待发生的攻击

逐个转义每个输入。如果对整个SQL查询执行此操作,则无法确保SQL语句在转义后仍然有效。我们不写

aaa

用户将输入

a", "a

所以在生成的SQL中你会收到

("a", "a") 
不是

("aaa")

我认为在这种情况下转义整个SQL语句是行不通的

我猜使用mysql_real_escape_string转义sql字符串更有利。关于时间和记忆。如果需要,可以在每个输入级别进行一些验证。

您担心转义每个变量的代码太长,但由于某种原因您忘记了函数的目的。

function escape_me($value) {
     $value = strip_tags($value);
     $value = mysql_real_escape_string($value);
     .........
}
$var1 = escape_me($_POST['var1']);