您的位置:首页 > 数据库

数据库抽象层PDO

2016-05-16 13:37 316 查看
通过数据库抽象层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();
}
}
}




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: