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

时间:2011-11-16 01:02:16

标签: php escaping sql-injection

我经常逐一逃避输入,我想知道两种方法之间的区别。哪一种更常见?我首先尝试转义“逃避要求”字段,然后我最终为每个值编写长的转义代码。一次转出整个sql语句有什么缺点?

6 个答案:

答案 0 :(得分:3)

它不起作用,因为在查询中你使用“单引号”之类的东西来表示值而你不希望那些转义,但你确实想要转义可能包含单引号的值。

答案 1 :(得分:1)

有点偏离主题,但我觉得这非常重要。

这不是你在这个问题上的第一个问题。似乎你仍然没有明白这一点。

  

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

我请原谅,但这个问题似乎是你的主要问题 而不是寻求理解,而不是寻找解释,你只是要求某种积极的答案。

根据您对此事的理解,此问题的结果应该是您给自己的答案
只有在这种情况下它才会对你有益。
否则你将再次绊倒下一步。

请尝试理解逃避字符串的含义 对于拥有非常基本的SQL知识的人来说,你的问题绝对没有意义 当然,这样的整个查询转义将永远不会起作用。仅仅因为SQL查询的性质 你迫切需要来理解这种性质。 请读一些书。 请,请求解释,而不是保证。

答案 2 :(得分:0)

使用预准备语句并使用绑定参数。其他任何东西都是等待发生的黑客

答案 3 :(得分:0)

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

aaa

用户将输入

a", "a

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

("a", "a") 

而不是

("aaa")

我认为逃避整个SQL语句在这种情况下不起作用。

答案 4 :(得分:-1)

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

答案 5 :(得分:-1)

您担心转义每个var的长代码但由于某种原因您忘记了函数的用途。

function escape_me($value) {
     $value = strip_tags($value);
     $value = mysql_real_escape_string($value);
     .........
}

$var1 = escape_me($_POST['var1']);

希望这会让你指出正确的方向。