PHP-php的pdo不直接使用sql语句查询问题
为什么php的pdo不直接使用sql语句查询,而是经过prepare之后执行呢,请技术高人给出真正的实用分析。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
为什么php的pdo不直接使用sql语句查询,而是经过prepare之后执行呢,请技术高人给出真正的实用分析。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(2)
还有个效率上的区别
prepare+execute(也就是参数化查询)比query sql语句执行效率要高
原因是 query首先mysql需要解析sql语句 然后执行mysql命令
而参数化相当于直接执行mysql 省去了mysql解析sql的操作
注:参数化查询$data2 = $obj->prepare("SELECT * FROM
article
WHEREid
= ?");在$data2->execute(array(1));之后要及时注销$data2
windows环境下不会出问题
否则在linux环境下如果你下一个$obj->prepare赋给的变量名跟前一次一样然后执行execute的时候会报错
其实不是全部这样的,你也可以直接query。prepare后其实并没有向数据库提交任何请求,也就是说sql语句还没有执行,只是“准备”好了一个SQL语句,你需要调用execute方法,才真正的执行。而query等于prepare+execute方法。之所以用prepare我理解有2个优点,一是你不用考虑过滤参数内容,prepare自动给你过滤或转义要插入数据库的数据,这可以防止sql注入;二是prepare可以传递参数,举个例子:
$obj = new PDO();
$data = $obj->query("SELECT * FROM `article` WHERE `id` = 1");
$data2 = $obj->prepare("SELECT * FROM `article` WHERE `id` = ?"); //这个问号就代表一个参数,这个参数是可以修改
$data2->bindValue(1 , 10); //id=10