php sql注入转义字符串

时间:2012-03-31 20:48:22

标签: sql code-injection

我有这个代码,由于某种原因,它输入了确切的值(包括mysql_real ...)

mysql_query("INSERT INTO members (username) VALUES ('mysql_real_escape_string($uname)')");

我该怎么重写这个,所以我没有这个问题?

2 个答案:

答案 0 :(得分:2)

mysql_real_escape_string是一个PHP函数,而不是MySQL函数。

$value = mysql_real_escape_string($uname);

mysql_query("INSERT INTO members (username) VALUES ('$value')");

更新:内联mysql_real_escape_string

mysql_query("INSERT INTO members (username) VALUES ('".mysql_real_escape_string($uname)."')");

答案 1 :(得分:2)

你也可以使用prepared statement,其中PDO负责逃避它使用的任何数据库(不仅仅是MySQL):

$stmt = $dbh->prepare("INSERT INTO members (username) VALUES (:username)");

// either:
$stmt->bindParam(':username', $uname);
$stmt->execute();

// or as Corbin pointed out in the comments:
$stmt->execute(array('username' => $uname))