2013-04-05 67 views
0

什么是消毒这个最简单,最有效的方法:消毒一些SQL查询

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

而且,我学习PHP的,所以如果可以,请提供解释,提示,建议,或多种方式来清洁最多的东西,以防止将最赞赏

+1

使用PDO或mysqli并查看准备好的语句。他们都有清理选项,将有据可查。 – 2013-04-05 02:53:01

+0

使用mysql_real_escape_string – 2013-04-05 02:53:54

+1

除了清理查询之外,您应该考虑散列和腌制密码,而不是以纯文本形式存储它们。 – Blorgbeard 2013-04-05 02:54:23

回答

1

我喜欢用$ 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(); 
+0

我相信你试图让示例代码很糟糕。另外我会使用PDO mysqli不是很好。 – lemondrop 2013-04-05 02:59:08

+0

“使用你的代码的例子”*在顶部抛出$ q =行并且什么都不做*哦,看看我这样的巨魔 – lemondrop 2013-04-05 03:05:11

+0

无论如何这个话题已经死了,反正没有任何意义。 – lemondrop 2013-04-05 03:11:09

0

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

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

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