标签:mysq 数据 order by dem soc sso ble int sql
<span style="font-size:18px;"><?php
$dbh = new PDO("mysql:host=localhost; dbname=demo", "user", "pass");
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); //禁用prepared statements的仿真效果
$dbh->exec("set names ‘utf8‘");
$sql="select * from test where name = ? and password = ?"; //也能够用:neme这样的形式
$stmt = $dbh->prepare($sql);
$exeres = $stmt->execute(array($testname, $pass));
if ($exeres) {
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
print_r($row);
}
}
$dbh = null;
//多说一嘴:
当调用 prepare() 时,查询语句已经发送给了数据库server。此时仅仅有占位符 ? 发送过去。没实用户提交的数据;当调用到 execute()时。用户提交过来的值才会传送给数据库,他们是分开传送的。两者独立的,SQL攻击者没有一点机会。
可是我们须要注意的是下面几种情况,PDO并不能帮助你防范SQL注入
1、你不能让占位符 ? 取代一组值,如:
SELECT * FROM blog WHERE userid IN ( ? );
2、你不能让占位符取代数据表名或列名。如:
SELECT * FROM blog ORDER BY ?;
3、你不能让占位符 ?
取代不论什么其它SQL语法,如:
SELECT EXTRACT( ?
FROM datetime_column) AS variable_datetime_element FROM blog;
</span>
标签:mysq 数据 order by dem soc sso ble int sql
原文地址:http://www.cnblogs.com/cxchanpin/p/6866929.html