什麼是消毒這個最簡單,最有效的方法:消毒一些SQL查詢
$q = "SELECT * FROM `admin` "
."WHERE `username`=' ".$_POST["username"]."' "
."AND `passcode`=' ".$_POST["password"]."' "
而且,我學習PHP的,所以如果可以,請提供解釋,提示,建議,或多種方式來清潔最多的東西,以防止將最讚賞
什麼是消毒這個最簡單,最有效的方法:消毒一些SQL查詢
$q = "SELECT * FROM `admin` "
."WHERE `username`=' ".$_POST["username"]."' "
."AND `passcode`=' ".$_POST["password"]."' "
而且,我學習PHP的,所以如果可以,請提供解釋,提示,建議,或多種方式來清潔最多的東西,以防止將最讚賞
我喜歡用$ mysqli的prepared statements
SQL注入 - 這裏是從PHP網站爲例:
解釋(使用你的代碼中看到的一個例子底部):
用?
標記替換查詢中的變量,然後在bind
之後用bind
變量。
$city = "Amersfoort";
/* create a prepared statement */
if ($stmt = $mysqli->prepare("SELECT District FROM City WHERE Name=?")) {
/* bind parameters for markers */
$stmt->bind_param("s", $city);
/* execute query */
$stmt->execute();
/* bind result variables */
$stmt->bind_result($district);
/* fetch value */
$stmt->fetch();
printf("%s is in district %s\n", $city, $district);
/* close statement */
$stmt->close();
}
/* close connection */
$mysqli->close();
示例使用您的代碼:
$q = "SELECT * FROM `admin` "
."WHERE `username`= ? AND passcode = ?";
/* create a prepared statement */
if ($stmt = $mysqli->prepare($q)) {
/* bind parameters for markers */
$stmt->bind_param("ss", $_POST['username'], $_POST['password']);
/* execute query */
$stmt->execute();
/* bind result variables */
$stmt->bind_result($district);
/* fetch value */
$stmt->fetch(); // This can also be while($stmt->fetch()){ Code here }
printf("%s is in district %s\n", $city, $district);
/* close statement */
$stmt->close();
}
/* close connection */
$mysqli->close();
如果你真的必須知道它會是這樣的:
$q = "SELECT * FROM `admin` "
."WHERE `username`=' ".mysql_real_escape_string($_POST["username"])."' "
."AND `passcode`=' ".mysql_real_escape_string($_POST["password"])."' "
但正如有人說,你應該使用最有可能的PDO或mysqli,因爲所有mysql_命令都被棄用。
使用PDO或mysqli並查看準備好的語句。他們都有清理選項,將有據可查。 – 2013-04-05 02:53:01
使用mysql_real_escape_string – 2013-04-05 02:53:54
除了清理查詢之外,您應該考慮散列和醃製密碼,而不是以純文本形式存儲它們。 – Blorgbeard 2013-04-05 02:54:23