清理一些SQL查询

时间:2013-04-05 02:50:34

标签: php sql

消毒这个最简单,最有效的方法是什么:

$q = "SELECT * FROM `admin` " 
."WHERE `username`=' ".$_POST["username"]."' " 
."AND `passcode`=' ".$_POST["password"]."' " 

另外,我正在学习PHP,所以如果你能提供解释,提示,建议或更多方法来清理内容以防止SQL注入,那将是最受欢迎的

2 个答案:

答案 0 :(得分:1)

我喜欢使用$ mysqli prepared statements - 这是PHP网站的一个例子:

说明(请参阅底部以获取使用代码的示例):

您可以使用?标记替换查询中的变量,然后在以后使用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();

答案 1 :(得分:0)

如果你真的必须知道它会是这样的:

$q = "SELECT * FROM `admin` " 
."WHERE `username`=' ".mysql_real_escape_string($_POST["username"])."' " 
."AND `passcode`=' ".mysql_real_escape_string($_POST["password"])."' "

但正如其他人所说,你应该使用最有可能的PDO或mysqli,因为所有的mysql_命令都已被弃用。