回声时mysql_real_escape_string?

时间:2012-12-11 11:14:54

标签: mysql-real-escape-string

我知道在查询中运行时我必须使用mysql_real_escape_string,例如:

$ProjectHasReservationQuery = ("
                        SELECT * 
                        FROM reservelist rl
                            INNER JOIN project p on rl.projectid = p.projectid
                        WHERE rl.projectid = ". mysql_real_escape_string($record['projectid']) ."
                        AND restype = 'res'
                        ");

但如何回应它,如:

query1 = mysql_query("SELECT * FROM users");
while ($record = mysql_fetch_array($query1 ))
{
    echo "".stripslashes(mysql_real_escape_string($record['usersurname']))."";
    // OR
    echo "".$record['usersurname']."";
}

是哪一个?我个人认为echo "".$record['usersurname']."";,因为这是来自一个查询,而不是INTO。但是要100%肯定。

(我知道PDO和mysqli)

1 个答案:

答案 0 :(得分:2)

  

我知道在查询中运行它时我必须使用mysql_real_escape_string

相反,你不应该在这样的查询中使用mysql_real_escape_string。
没有任何好处,但会给你带来虚假的安全感。

正如您可以从函数名称中所说,它用于在添加数字时转义字符串。因此,此功能变得无用,而您的查询仍然可以进行注入。

必须使用此函数来格式化SQL查询中的引用字符串 因此,您可以从此规则中得出答案:不,使用此函数进行输出没有意义。

至于保护,要么将你的号码视为一个字符串(通过引用和转义它)或使用intval()函数来强制转换它。

或者,最好的选择,摆脱这种手动格式化并开始使用占位符来表示查询中的动态数据。它不一定是预备语句 - 它可以使用相同的转义,但封装在一些占位符处理函数