我应该在哪里做mysql_real_escape_string?

时间:2011-02-05 18:07:17

标签: php

我有一个关于mysql_real_escape_string的快速问题。我应该在哪里使用它?

我有一个* .php文件,其表单将其重定向到自身,但该文件正在使用另一个文件,其中包含函数Add(params);

在提交字符串时我应该逃避字符串吗?

$catName = mysql_real_escape_string($_POST['edtCatAddName']);

或者我应该在班上逃避字符串吗?

$catName = mysql_real_escape_string($catName);

或许这两种情况都是错误的,我还需要做点其他事情?我试图像我一样逃避我的查询

$query = mysql_real_escape_string("INSERT INTO cat (catName, catDescr, catImg, catSubLevel, catSubID) VALUES ('$catName', '$catDescr', '$catImgURL', $catSubLevel, $catSubID)");

但它不太好,因为这样我的查询就不会去,因为catName和其他一些变量是字符串类型,我需要在它们之前和之后添加'这些字符被转义。

有什么建议吗?我对此很新...

因此,如果我使用PDO,那么我所要做的就是

$STH = $DBH->prepare("my raw, not escaped query");  
$STH->execute(); 

我能感到安全吗?

4 个答案:

答案 0 :(得分:2)

无处,您应该使用PDO预备语句来保护您免受SQL注入。

答案 1 :(得分:1)

何时使用mysql_real_escape_string()

实际上,在清理用户的输入时使用mysql_real_escape_string()。因此,您应该(至少)在任何地方使用它,用户可以输入任何进入查询的内容。我们还建议您使用Prepared Statements

准备好的陈述

基本上它们是非常安全的SQL查询。 让我们举个例子。

SELECT UserName FROM user WHERE UserUID = X

是一个简单的查询。假设X是来自$_GET输入的变量。有些用户可以向X添加所有内容。即使是1;,然后开始新的查询。这种技术称为SQL Injection

现在使用mysql_real_escape_string()解决了部分问题,而且非常安全。但Prepared语句告诉服务器

SELECT UserName FROM user WHERE UserUID =

类似于静态部分,然后X是变量。通过这种方式,服务器有点准备来执行这样的查询,而不考虑X中任何输入的输入。通过这种方式,您根本不必担心用户输入。

答案 2 :(得分:0)

你可以这样做:

$catName = mysql_real_escape_string($_POST['catName']);

或直接在查询中使用mysql_real_escape_string()

对于预期为数字的值(整数,浮点数) - 您可以使用intval($var)表示整数,或floatval($var)表示浮点数。

BUT:
永远不要将mysql_real_escape_string()用于整个查询 - 这完全是错误的; - )

编辑:
我忘了提到:最好是使用PDO(PHP数据对象) - > http://de.php.net/PDO

答案 3 :(得分:0)

别。使用mysqli或PDO在查询中使用参数。