通过数据库抽象层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();
}
}
}

数据库抽象层PDO的更多相关文章

  1. PHP数据库抽象层--PDO(PHP Data Object) [一]

    1.简介:(PDO数据库访问抽象层,统一各种 数据库的访问接口 ) PHP 数据对象 (PDO) 扩展为PHP访问数据库定义了一个轻量级的一致接口.实现 PDO 接口的每个数据库驱动可以公开具体数据库 ...

  2. 《细说PHP》第四版 样章 第18章 数据库抽象层PDO 2

    18.2  PDO所支持的数据库 使用PHP可以处理各种数据库系统,包括MySQL.PostgreSQL.Oracle.MsSQL等.但访问不同的数据库系统时,其所使用的PHP扩展函数也是不同的.例如 ...

  3. PHP 数据库抽象层pdo

    PDO是PHP数据对象(PHP Data Object)的缩写. pdo就是一个"数据库访问抽象层",作用是统一各种数据库的访问接口,能够轻松地在不同数据库之间进行切换,使得数据库 ...

  4. 《细说PHP》第四版 样章 第18章 数据库抽象层PDO 5

    18.5  使用PDO对象 PDO扩展类库为PHP访问数据库定义了一个轻量级.一致性的接口,它提供了一个数据访问抽象层,这样,无论使用什么数据库,都可以通过一致的函数执行查询和获取数据,大大简化了数据 ...

  5. 《细说PHP》第四版 样章 第18章 数据库抽象层PDO 1

    现在,如果你已经能熟练地使用MySQL客户端软件来操作数据库中的数据,就可以开始学习如何使用PHP来显示和修改数据库中的数据了.PHP提供了标准的函数来操作数据库.在PHP 5以上的版本中可以使用My ...

  6. 【代码总结】数据库抽象层PDO

    一.概述 PDO就是一个"数据库访问抽象层",起作用是统一各种数据库的访问接口,能够轻松的在不同数据库之间进行切换. 二.PDO的安装 编辑php.ini文件 添加 extensi ...

  7. 《细说PHP》第四版 样章 第18章 数据库抽象层PDO 12

    18.9  管理表books实例 在Web项目中,几乎所有模块都要和数据表打交道,而对表的管理无非就是增.删.改.查等操作,所以熟练掌握对表进行管理的这些常见操作是十分有必的.本例为了能更好地展示PD ...

  8. 《细说PHP》第四版 样章 第18章 数据库抽象层PDO 9

    18.7  PDO的事务处理 事务是确保数据库一致的机制,是一个或一系列的查询,作为一个单元的一组有序的数据库操作.如果组中的所有SQL语句都操作成功,则认为事务成功,那么事务被提交,其修改将作用于所 ...

  9. 《细说PHP》第四版 样章 第18章 数据库抽象层PDO 8-1

    18.6.5  获取数据 PDO的数据获取方法与其他数据库扩展非常类似,只要成功执行SELECT查询,都会有结果集对象生成.不管使用PDO对象中的query()方法,还是使用prepare()和exe ...

随机推荐

  1. HTTP协议图解

    1.HTTP简介 http是用于客户端与服务端之间的通信 实际情况中客户端与服务端角色有可能互换,但从一条通信线路来说服务器端和客户端角色是确定的,http协议知道那个是服务端那个是客户端呢. htt ...

  2. Yandex.Algorithm 2011 A. Double Cola

    1.题目描写叙述:点击打开链接 2.解题思路:本题是一道找规律的数学题,通过题意描写叙述不难知道,相当于有5棵二叉树构成了一个森林,须要你按层次遍历找到第n个人是谁. 观察后不难发现,如果最開始的一层 ...

  3. 【Hadoop基础教程】4、Hadoop之完全分布式环境搭建

    上一篇blog我们完成了Hadoop伪分布式环境的搭建,伪分布式模式也叫单节点集群模式, NameNode.SecondaryNameNode.DataNode.JobTracker.TaskTrac ...

  4. ApplicationContextRunner如何简化自动配置测试

    1. 概览 众所周知,自动配置是Spring Boot的关键功能之一, 但测试自动配置可能会很棘手. 在以下部分中,我们将展示ApplicationContextRunner如何简化自动配置测试. 2 ...

  5. 专用于高并发的map类-----Map的并发处理(ConcurrentHashMap)

    oncurrentModificationException 在这种迭代方式中,当iterator被创建后集合再发生改变就不再是抛出ConcurrentModificationException, 取 ...

  6. Swift中文教程(七)--协议,扩展和泛型

    Protocols and Extensions 协议(接口)和扩展 Swift使用关键字protocol声明一个协议(接口): 类(classes),枚举(enumerations)和结构(stru ...

  7. [译]GLUT教程 - 移动镜头3

    Lighthouse3d.com >> GLUT Tutorial >> Input >> Moving the Camera III 上一节的示例中我们用键盘更改 ...

  8. asp.net web.config配置节说明

    web.config 文件查找规则:      (1)如果在当前页面所在目录下存在web.config文件,查看是否存在所要查找的结点名称,如果存在返回结果并停止查找.      (2)如果当前页面所 ...

  9. printf()与 scanf()

    一直以来就没有认真看过控制台输入输出的格式,现今找了一些材料,分享如下: 1. 格式化规定符     Turbo C2.0提供的格式化规定符如下: ━━━━━━━━━━━━━━━━━━━━━━━━━━ ...

  10. tornado+ansible+twisted+mongodb运维自己主动化系统开发(四)

    这周好忙,依据之前的写了个简陋的demo.放在腾讯的云主机上了,大家多交流哈 demo地址 http://203.195.193.251/