Heim > Artikel > Backend-Entwicklung > 下面的代码可以有效防止 sql 注入吗 ?
下面的代码可以有效防止 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预处理的。