PDO-数据库访问抽象层

C语言编写,PHP编译。php5面向对象。

在php.ini任意位置配置这句话,t2是自定义名,建议和要打开的数据库一样。

建议用参数形式连接数据库。$dsn是数据源,包含主机名和数据库名。

最简单的pdo连接数据库。

使用<<<EOF

EOF;就不能用引号。在php中创建数据表用这种EOF大文本格式。写完sql可以echo看看。接着复制到命令行试试。接着删除。truncate table 表名;清空表记录。truncate 截断。mysql命令控制台可以调颜色。插入多条也用大文本格式。altert table user  auto_increment=10;调整即将插入的记录id号。$pdo->lastInsertId();得到新插入记录的id号。lastInsertId()这是针对插入操作,对更新等其他操作返回0.UPDATE user SET username="king" where id=1在id=1,username=king的前提还更新,相当于没更新,此时会匹配1条,但受影响0条。delete from user where id=1;删除记录格式delete from 表名 where 条件即可。

0是错误码,1是错误编号。errorCode()返回的是错误码,errorInfo()返回的是数组。query执行查询select后需要遍历foreach才可以打印具体内容。query用于查询更多,exec用于增删改更多。PDO可以使用预处理或者不使用。

fetch得到一条记录,循环可以多条。调用fetch结果集是prepare语句而不是execute语句。

$rows=$stmt->fetchAll();
print_r($rows);这样可以不用循环fetch()。不管fetch还是fetchall都是返回索引加关联的数组。

加上参数即可按参数定义的形式返回数组。fetch(PDO::FETCH_OBJ)还可以用返回对象的形式。

还可以预先设置语句返回模式。这里的索引和关联范围指最后一维数组。即字段名。$dsn最后的值可以不加分号结尾。echo ‘自动提交‘.$pdo->getAttribute(PDO::ATTR_AUTOCOMMIT);查看自动提交是否开启,应用于事务场所。$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT,0);设置属性。

连接数据库的第四个参数还可以自己设置连接参数。quote()防止sql注入。用了pdo不一定防止注入,还要预处理。

$pdo=new PDO()为PDO连接,关闭数据库连接将其设为null即可,即$pdo=null。不建议quote方法防止注入,

预处理更好。

?这种占位符更好。

<?php
header(‘content-type:text/html;charset=utf-8‘);

try {
$pdo=new PDO(‘mysql:host=localhost;dbname=t2‘,‘root‘,‘‘);
$sql="INSERT user(username,password,email) VALUES(:username,:password,:email)";
$stmt=$pdo->prepare($sql);
$stmt->bindParam(":username",$username,PDO::PARAM_STR);
$stmt->bindParam(":password", $password,PDO::PARAM_STR);
$stmt->bindParam(":email", $email);
$username=‘imooc1‘;
$password=‘imooc1‘;
$email=‘[email protected]‘;
$stmt->execute();
$username=‘K1‘;
$password=‘k1‘;
$email=‘[email protected]‘;
$stmt->execute();
echo $stmt->rowCount();
} catch (PDOException $e) {
echo $e->getMessage();
}

?>

<?php
header(‘content-type:text/html;charset=utf-8‘);

try {
$pdo=new PDO(‘mysql:host=localhost;dbname=t2‘,‘root‘,‘‘);
$sql="INSERT user(username,password,email) VALUES(?,?,?)";
$stmt=$pdo->prepare($sql);
$stmt->bindParam(1, $username);
$stmt->bindParam(2, $password);
$stmt->bindParam(3, $email);
$username=‘THIS IS A TEST‘;
$password=‘THIS IS A TEST‘;
$email=‘[email protected]‘;
$stmt->execute();
echo $stmt->rowCount();
} catch (PDOException $e) {
echo $e->getMessage();
}

parameter参数问号占位符赋值时,指定位置从1开始。当参数多的时候最好用:name这种,不用问号。bindParam(":id",$id);$id=10;放引用,再赋值,不要直接写入参数内。当有一个参数多次插入值一样就要用bindValue();mysqlrename命令格式:rename table 原表名 to 新表名;$stmt->nextRowset();指针下移到下一个结果集。
/*
 PDO::ERRMODE_SILENT:默认模式,静默模式,完全不显示,
 PDO::ERRMODE_WARNING:警告模式,抛出警告后,程序可继续运行
 PDO::ERRMODE_EXCEPTION:异常模式(UP推荐模式),错误信息显示最完整,在抛出异常后程序停止运行
 */

<?php
header(‘content-type:text/html;charset=utf-8‘);
try {
$options=array(PDO::ATTR_AUTOCOMMIT,0);
$pdo=new PDO(‘mysql:host=localhost;dbname=t2‘,‘root‘,‘‘,$options);
$pdo->beginTransaction();
$sql=‘update userAccount set money=money-2000 where username="imooc"‘;

$res1=$pdo->exec($sql);
if ($res1==0){
throw new PDOException(‘imooc 转账失败‘);
}
$res2=$pdo->exec(‘update userAccount set money=money+2000 where username="king"‘);
if ($res2==0){
throw new PDOException(‘king 接收失败‘);
}
$pdo->commit();
} catch (PDOException $e) {
$pdo->rollBack();
echo $e->getMessage();
}

事务处理。innoDB引擎才支持事务。

pdo关闭:看你是否永久连接,如果不是永久连接的话关闭页面或者销毁对象的时候就关闭了。PDO的连接数据库效率低于MYSQLi,速度前者比后者慢,耗时长。

插入效率也是pdo慢。除非要求效率高,否则用pdo。

				
时间: 2024-10-11 05:26:42

PDO-数据库访问抽象层的相关文章

PDO是一个“数据库访问抽象层”

PDO是一个"数据库访问抽象层",作用是统一各种数据库的访问接口,与mysql和mysqli的函数库相比,PDO让跨数据库的使用更具有亲和力:与ADODB和MDB2相比,PDO更高效. 目前而言,实现"数据库抽象层"任重而道远,使用PDO这样的"数据库访问抽象层"是一个不错的选择. PDO中包含三个预定义的类 PDO中包含三个预定义的类,它们分别是 PDO.PDOStatement 和 PDOException. 一.PDO PDO->be

PHP中关于PDO数据访问抽象层的功能操作

PDO:数据访问抽象层 具有三大特点: 1.可以访问其它数据库  所有数据库都可以 2.具有事务功能 3.带有预处理语句功能(防止SQL注入攻击) 实例操作代码如下: <?php //1.造PDO对象$dsn ="mysql:dbname=mydb;host=localhost";//数据库类型:dbname=数据库名称;host=链接的ip或本机$pdo =new PDO($dsn,"root","root");//$dsn,帐号,密码

PDO 数据访问抽象层

//PDO //数据访问抽象层 <?php //1.操作其它数据库 //2.事务功能 //3.防止SQL注入攻击 //造PDO对象 //$dsn = "mysql:dbname=mydb;host=localhost"; //数据源 //$pdo = new PDO($dsn,"root","123"); //写SQL语句 //$sql = "select * from nation"; //$sql = "i

PDO(数据访问抽象层)、pdo事务功能和预处理功能---2017-05-05

之前所学的数据访问都是用mysqli做成类来访问的,但是mysqli这个类只是针对mysql这个数据库的:那么如果访问其他类型的数据库呢? 那么这就用到了PDO(数据访问抽象层). 一.关于PDO基本语句(以MySQL数据库为例,因为电脑没有其他的数据库) (1)造PDO对象 $dsn = "mysql:dbname=mydb;host=localhost"; $pdo = new PDO($dsn,"root","123"); 格式: $dsn

PDO数据访问抽象层(上)

PDO比MySQLi功能强大 PDO可以访问MySQL及其它数据库 一.造对象 1 2 3 4 5 <?php     $dsn = "mysql:dbname = crud;host = localhost";     //mysql:MySQL数据库驱动dbname = crud:数据库名字 :host = localhost数据库地址     $pdo = new PDO($dsn,"root","123");//数据源,数据库用户名

PDO数据访问抽象层(下)

PDO两大功能 一.事务功能 PDO的事务功能主要控制好几条sql语句同时成功或者同时失败(当其中一条SQL语句有错误时,同时好几条一起失败),失败时可以回滚操作 1.造对象 1 2 3 4 <?php $dsn = "mysql:dbname=crud;host=localhost"; $pdo = new PDO($dsn,"root","123"); ?> 2.设置异常模式 1 $pdo->setAttribute(PDO

PHP-------PDO:数据访问抽象层

PDO:数据访问抽象层 它是用来做数据访问的,和数据库之间连接,执行一些SQL语句 这种方式比之前的,Mysqli的方式功能更大一些 用一张图来说明: 人为写了一条SQL语句,是通过Mysqli的对象(封装好的类),通过Mysql驱动,然后在操作Mysql数据库.这是以前的方式. 如果这条SQL语句,想访问另外一个数据库,不是Mysql了,想用一下Oracle Call数据库或者SQL Server数据库,根据逻辑,应该还要有一个类是专门操作Oracle Call 数据库的类 同一张图来表示:

PDO:数据访问抽象层

<?php //PDO:数据访问抽象层 //带有事务功能: //dsn:数据源 $dsn="mysql:host=localhost;dbname=aaas"; //造pdo对象 $pdo=new PDO($dsn,"root","");//数据源,用户名,密码 //启动事务 $pdo->beginTransaction(); //写SQL语句 $sql="select * form Info"; //执行SQL语

数据访问抽象层PDO

通过数据访问抽象层PDO可以访问多个数据库 //数据访问抽象层PDO //造DSN:驱动名:dbname=数据库名:host=服务器地址 $dsn = "mysql:dbname=mydb;host=localhost"; //造PDO对象 $pdo = new PDO($dsn,"root","xiao8888"); //写SQL语句 $sql = "select * from Info"; //执行SQL语句 //我们不这

PDO:: 数据访问抽象层 ? :

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <?php //定义数据源 $dsn="mysql:dbname=test2;host=localhost"; //$dsn="sql