我是php和PDO的新手,所以我读了这篇关于类似帖子的回复>
PDO真的不使用mysql准备好的语句吗?是的,通过 默认(至少在我测试的版本中),但可以启用纯模式 手动。如果不是,可以通过雇用来强制这样做 PDO :: ATTR_EMULATE_PREPARES设置,名称很漂亮 不言自明的。 $ dbh-> setAttribute(PDO :: ATTR_EMULATE_PREPARES, 错误的);你应该这样做吗?这是他们所有人最难的问题。 好吧,我会说 - 是的,你应该。如果选择PDO作为数据库驱动程序, 在仿真模式下使用它没有意义。
- Your Common sense
没有准备好的语句是否可以安全地从SQL注入,为什么从'true'改变 - > false?什么是原生模式?
答案 0 :(得分:3)
从那时起我就改变了主意。
首先,每种模式都同样安全。
本地绑定不是使预处理语句安全,而是参数化语句的一般原则,它执行完整格式化,从而产生无法查询。
所以,我宁愿在上保持仿真模式,因为它对平均网络使用更有意义,并允许一些小的便利,例如更明智的错误消息(在查询中实际替换了数据)或多个具有相同名称的占位符。
从仿真更改为纯模式的唯一原因是预处理语句的另一个好处 - 可以多次执行准备好的语句。但是,如上所述,它很少需要。
答案 1 :(得分:-5)
取决于对你来说最重要的东西 - 简单的编码和几行或正确的方法来避免sql注入。 如果你不使用庞大的数据库,它对速度没有影响,所以最好留下它 你可以编码像
$result = $this->db->select('SELECT * FROM tbl_users WHERE login = :login AND password = :password', $arraiul);
或者像那样
function editusers(){
$id = $_POST['id'];
$name = $_POST['name'];
$login = $_POST['username'];
$password = $_POST['password'];
$email = $_POST['email'];
$power = $_POST['power'];
if ($password ==''){
$sqlstm = "UPDATE tbl_users SET name='$name', login='$login', email='$email', power='$power' WHERE id='$id'";
} else {
$sqlstm = "UPDATE tbl_users SET name='$name', login='$login', password=MD5('$password'), email='$email', power='$power' WHERE id='$id'";
}
$sth = $this->db->prepare($sqlstm);
$sth->execute();
}
enter code here