我有這樣的代碼,以及由於某種原因,提出準確的數值(包括mysql_real ...)PHP的SQL注入逃生繩
mysql_query("INSERT INTO members (username) VALUES ('mysql_real_escape_string($uname)')");
我怎麼重寫這個,所以我沒有這個問題?
我有這樣的代碼,以及由於某種原因,提出準確的數值(包括mysql_real ...)PHP的SQL注入逃生繩
mysql_query("INSERT INTO members (username) VALUES ('mysql_real_escape_string($uname)')");
我怎麼重寫這個,所以我沒有這個問題?
mysql_real_escape_string是一個PHP函數,不是MySQL函數。
$value = mysql_real_escape_string($uname);
mysql_query("INSERT INTO members (username) VALUES ('$value')");
UPDATE:內嵌mysql_real_escape_string
mysql_query("INSERT INTO members (username) VALUES ('".mysql_real_escape_string($uname)."')");
你也可以使用一個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))
是不是有一些方法,我可以將它綁定到SQL,所以我不必讓他們分開?我以爲我看到有人這樣做...... – droidus 2012-03-31 20:52:13
是的,但爲什麼? 'mysql_query(「INSERT INTO members(username)VALUES('」.mysql_real_escape_string($ uname)。「')」);' – David 2012-03-31 20:53:00
idk,只是好奇。謝謝! – droidus 2012-03-31 20:53:57