Heim  >  Artikel  >  Backend-Entwicklung  >  下面的代码可以有效防止 sql 注入吗 ?

下面的代码可以有效防止 sql 注入吗 ?

WBOY
WBOYOriginal
2016-06-06 20:35:22980Durchsuche

下面的代码可以有效防止 sql 注入吗 ?

大家一般是怎么做的 .

<code><?php $dbh = new PDO("mysql:host=localhost; dbname=mydb", "root", "pass");

$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); //禁用prepared statements的仿真效果
$dbh->exec("set names 'utf8'"); 

$sql="select * from table where username = ? and password = ?";

$query = $dbh->prepare($sql); 

$exeres = $query->execute(array($username, $pass)); 

if ($exeres) { 

    while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
        print_r($row);
    }
    
}
$dbh = null;

?>
</code>

回复内容:

下面的代码可以有效防止 sql 注入吗 ?

大家一般是怎么做的 .

<code><?php $dbh = new PDO("mysql:host=localhost; dbname=mydb", "root", "pass");

$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); //禁用prepared statements的仿真效果
$dbh->exec("set names 'utf8'"); 

$sql="select * from table where username = ? and password = ?";

$query = $dbh->prepare($sql); 

$exeres = $query->execute(array($username, $pass)); 

if ($exeres) { 

    while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
        print_r($row);
    }
    
}
$dbh = null;

?>
</code>

建议这样写, 能更有效的防注入

<code>......

$sql="select * from table where username = ?";

......


    while ($row = $query->fetch(PDO::FETCH_ASSOC) && $row['pass'] == $pass) {
        print_r($row);
    }
</code>

你的代码完全可以防止SQL注入,因为PDO就是SQL预处理的。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn