什么是消毒这个最简单,最有效的方法:消毒一些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