pdo 预处理的问题
pdo预处理,直接使用prepare()传递数组,和通过绑定变量bindParam().实现有什么不同.下面是两个例子,我看到某些资料说第一种效率差一些,是不是这种情况?
使用数组指定预处理变量
<?php $pdo=new PDO($dsn,$user,$pwd); // 连接数据库 $query="INSERT INTO tb_chengji SET xuesheng=:xuesheng,yuwen=:yuwen"; $result=$pdo->prepare($query); $result->execute(array(':xuesheng'=>'赵天平',':yuwen'=>'90')); // 执行一次 $result->execute(array(':xuesheng'=>'张冬雪',':yuwen'=>'115')); // 再执行一次 ?>
通过bindParam实现的
<?php $pdo=new PDO($dsn,$user,$pwd); // 连接数据库 $query="INSERT INTO tb_chengji SET xuesheng=:xuesheng,yuwen=:yuwen"; $result=$pdo->prepare($query); $xuesheng='赵天平'; $yuwen='90'; $result->bindParam(':xuesheng',$xuesheng); $result->bindParam(':yuwen',$yuwen); $result->execute(); $xuesheng='张冬雪'; $yuwen='115'; $result->bindParam(':xuesheng',$xuesheng); $result->bindParam(':yuwen',$yuwen); $result->execute(); ?>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
SQL经过prepare才叫预处理,PDO的exec和query只是执行SQL语句,不是预处理.
execute里放数组,跟使用bindParam都可以达到绑定参数的作用,效果是一样的.
方法1(问号占位符)
$stmt = $db->prepare('UPDATE posts SET post_title = ?, post_content = ? WHERE id = ?');
$stmt->execute(array($title,$content,$id));
//execute中所有值视作PDO::PARAM_STR处理
方法1(命名占位符)
$stmt = $db->prepare('UPDATE posts SET post_title = :title, post_content = :content WHERE id = :id');
$stmt->execute(array(':title' => $title,':content' => $content,':id' => $id));
//execute中所有值视作PDO::PARAM_STR处理
方法2(问号占位符)
$stmt = $db->prepare('UPDATE posts SET post_title = ?, post_content = ? WHERE id = ?');
$stmt->bindParam(1, $title, PDO::PARAM_STR);
$stmt->bindParam(2, $content, PDO::PARAM_STR);
$stmt->bindParam(3, $id, PDO::PARAM_INT);
$stmt->execute();
方法2(命名占位符)
$stmt = $db->prepare('UPDATE posts SET post_title = :title, post_content = :content WHERE id = :id');
$stmt->bindParam(':title', $title, PDO::PARAM_STR);
$stmt->bindParam(':content', $content, PDO::PARAM_STR);
$stmt->bindParam(':id', $id, PDO::PARAM_INT);
$stmt->execute();
PDO对比MySQLi:
MySQLi只有一种写法(MySQLi不支持命名占位符)
$stmt->bind_param('ssi', $title, $content, $id);
更多:
PHP MySQLi/PDO_MySQL/PDO_SQLite CRUD(增查改删)
不重开帖子了,补充一下.在学习pdo预处理方式时遇到了三种语句写法:
这三种预处理语句,有啥区别了?在防止sql注入上效果是不是一样的?