PHP中,实例化pdo对象以后PDOStatement类就能用了吗?
数据抽象层里不是把PDO、PDPStatement、PDOException分别作为三个类吗?为什么不用分别激活(实例化),而只实例一个PDO类就能直接用其它类里的方法?...
数据抽象层里不是把PDO、PDPStatement、PDOException 分别作为三个类吗?为什么不用分别激活(实例化),而只实例一个PDO类就能直接用其它类里的方法?手册里也没有说它们之间有父类与子类的关系呀?
PHP在线手册和其他一些教程里都有这样的例程:
<?php
$var="User', email='test";
$a=new PDO("mysql:host=localhost;dbname=database;","root","");
// 我的理解:此处PDO类被实例化为对象,那么PDO类里面的方法就肯定能用了。
$b=$a->prepare("UPDATE `users` SET user=:var");
//我的疑问开始了:bindparam()和execute()方法,不都是属于PDOStatement类的吗?为什么没有被实例化就可以直接使用了?
$b->bindParam(":var",$var);
$b->execute();
?>
类似的,像mysqli扩展里的相关类也有如此的用法,但我却找不到根据何在?
那么是不是说,只要涉及到“类”的扩展,就都可以这么用了呢? 展开
PHP在线手册和其他一些教程里都有这样的例程:
<?php
$var="User', email='test";
$a=new PDO("mysql:host=localhost;dbname=database;","root","");
// 我的理解:此处PDO类被实例化为对象,那么PDO类里面的方法就肯定能用了。
$b=$a->prepare("UPDATE `users` SET user=:var");
//我的疑问开始了:bindparam()和execute()方法,不都是属于PDOStatement类的吗?为什么没有被实例化就可以直接使用了?
$b->bindParam(":var",$var);
$b->execute();
?>
类似的,像mysqli扩展里的相关类也有如此的用法,但我却找不到根据何在?
那么是不是说,只要涉及到“类”的扩展,就都可以这么用了呢? 展开
1个回答
展开全部
不能这么说的 Statement ,Exception,这两个 其实并不完全是pdo的东西,你要注意下前缀 ,都添加了pdo这个对吧,这个意思也就是变成了 ,当我实例化pdo对象后 我要借用上面这两个类方法(用通俗的话可以给你这么解释)这两个当然没有和pdo是父子关系了)
Statement ---->PDPStatement Exception----> PDOException 这个才是父子关系 左边是爹右边是儿子
Statement ---->PDPStatement Exception----> PDOException 这个才是父子关系 左边是爹右边是儿子
追问
还是不理解呀,要照这么说的话,那我根本不用实例化PDO(new pdo())就能直接使用bindparam()和execute()了?似乎不成立吧?
追答
这样肯定不行啊,bindparam()和execute() 是pdo里面的批处理能用到的东西,说道批处理应该清楚点了吧,你这样理解 :把pdo当成一个房子 但这个房子你没有钥匙(这里钥匙我是指实例化) 可是只有你到这个房子里面才能干一些事情 (这些事情我指的就是类似bindparam()和execute() 这些) 那么按照现在这个思路 假设我要去这个房子里 是不是要有钥匙 ,我只有有钥匙才能进去办事情 。把这个换做pdo里面就是 我一定要实例化pdo对象后 我才能让系统认识我要用Statement ,Exception这两个不是原生的 是有关我pdo的东西 这样不就是解释了为啥要实例化pdo对象了么对吧 简单想 你这个实例化可以想成你有了房间的钥匙
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询