通过数据库抽象层PDO可以访问多个数据库
//数据库抽象层PDO //造DSN:驱动名:dbname=数据库名;host=服务器地址 $dsn = "mysql:dbname=mydb;host=localhost"; //造PDO对象 $pdo = new PDO($dsn,"root","xiao8888"); //写SQL语句 $sql = "select * from Info"; //执行SQL语句 //我们不这样执行,我们用预处理 //$v =$pdo->query($sql); //返回的对象比较特殊,可以用循环遍历 //预处理:先把SQL语句放到服务器上等待我们给他指令去执行 //准备一条SQL语句 $stm = $pdo->prepare($sql); //执行准备好的SQL语句 if($stm->execute()) { //1.逐行取数据 var_dump($stm->fetch()); //2.取所有数据 var_dump($stm->fetchAll()); //包含关联数组与索引数组 var_dump($stm->fetchAll(PDO::FETCH_ASSOC)); //返回关联数组 var_dump($stm->fetchAll(PDO::FETCH_NUM)); //返回索引数组 var_dump($stm->fetchAll(PDO::FETCH_OBJ)); //返回对象 //3.取某一列 var_dump($stm->fetchColumn(1)); //4.返回对象 var_dump($stm->fetchObject()); } else { echo "执行失败!"; }
我们在预处理时可以设置参数,然后给参数绑定值,但这种方法太复杂,不推荐使用,了解即可。例如:
//造对象 $dsn = "mysql:dbname=mydb;host=localhost"; $pdo = new PDO($dsn,"root","xiao8888"); //写SQL语句,参数用?或者字符串代替 $sql= "insert into Nation vlaues(?,?)"; //问号绑定的是索引数组 $sql= "insert into Nation vlaues(:code,:name)";//字符串绑定的是关联数组 //预处理 $stm = $pdo->prepare($sql); //给参数绑定值 太复杂,不推荐 $stm->bindParam(1,$code);//索引数组 $stm->bindParam(2,$name); $stm->bindParam("code",$code,PDO::PARAM_STR);//关联数组 $stm->bindParam("name",$name,PDO::PARAM_STR);
$code = "p007"; $name = "回族"; //执行 if($stm->execute()) { echo "添加成功!"; } else { echo "添加失败!"; }
我们可以用数组自动绑定参数,例如:
//造对象 $dsn = "mysql:dbname=mydb;host=localhost"; $pdo = new PDO($dsn,"root","xiao8888"); //写SQL语句,参数用?或者字符串代替 $sql= "insert into Nation vlaues(?,?)"; //问号绑定的是索引数组 $sql= "insert into Nation vlaues(:code,:name)";//字符串绑定的是关联数组 //预处理 $stm = $pdo->prepare($sql); //造数组 $attr = array("n006","藏族"); $attr = array("code"=>"n006","name"=>"藏族"); //执行 if($stm->execute($attr)) { echo "添加成功!"; } else { echo "添加失败!"; }
我们也可以将提交过来的值作为数组去执行SQL语句,这样在添加或修改数据的时候会非常方便。例如:
先做一个简单的添加页面:
<form action="Add.php" method="post"> <input type="text" name="code" /> <input type="text" name="name" /> <input type="submit" value="添加" /> </form>
再做一个处理页面:
<?php //造对象 $dsn = "mysql:dbname=mydb;host=localhost"; $pdo = new PDO($dsn,"root","xiao8888"); //写SQL语句 $sql = "insert into Nation values(:code,:name)"; //预处理 $stm = $pdo->prepare($sql); //执行 if($stm->execute($_POST)) { echo "添加成功!"; } else { echo "添加失败!"; }
我们可以将PDO做成方法封装在数据库类里面,使之更加完善。
<?php class DB { public $host="localhost"; //服务器地址 默认值为localhost public $uid="root"; //数据库用户名 默认值为root public $pwd="123"; //数据库密码 默认值为123
/*数据库抽象层PDO,可以从其他驱动访问数据库 参数: $sql: SQL语句 $type: SQL语句类型,默认为0,代表查询语句,1代表其他语句 $qdm: 驱动名,默认为mysql $db: 数据库名,默认为mydb*/ public function QueryPDO($sql,$type=0,$qdm="mysql",$db="mydb") { //1.造DSN $dsn="$qdm:dbname=$db;host=$this->host"; //2.造PDO对象 $pdo=new PDO($dsn,$this->uid,$this->pwd); //3.预处理 //准备一条SQL语句 $stm =$pdo->prepare($sql); //执行SQL语句 $stm->execute(); if($type==0) { return $stm->fetchAll(); } else { return $stm->execute(); } }
}