1.初识pdo
1.1pdo是森么
pdo在php5中是一个扩展模块,但是在php6里面pdo是一个内置默认的模块,PDO来对数据库进行访问,不同数据库使用相同的方法名,解决数据库不统一的问题。
pdo旨在于将常见的数据库功能作为基础提供,同时提供对于rdbms独特功能的方便访问。api不会强行介入你的代码,同时会清楚的表明每个函数调用的过程。
这玩意像是一个内置的函数调用外置的驱动。
抽象作用:提供一种轻型、清晰、方便的 API统一各种不同 RDBMS 库的共有特性,但不排除更高级的特性。通过 PHP 脚本提供可选的较大程度的抽象/兼容性。
1.2初始代码
fp:
$dsn = 'mysql:dbname=testdb;host=127.0.0.1';
//链接mysql数据库的dsn
$user = 'root';//mysql数据库的用户名
$password = 'root';//数据库连接的密码
try{
$dbh = new PDO($dsn,$user,$password);
}catch(PDOexception $e) {
echo '数据库连接失败: '.$e->getMessage();
}
这是一个神奇的代码:
因为他报错了,提示我们没有这个数据库:我们更改成存在的好嘛?
害突然有点喜欢这种0,和1的感觉了,只有对错没有意外。
当然你喜欢狂野一点的感觉我也不拒绝比如:
喜欢的掷地有声且大胆~
1.3 相关设置函数
首先开启pdo 相关设置是可以在我们phpinfo中看到,比如说你可以直接搜索phpinfo里面的pdo关键字。
接下来我i我们要学习的就是发怎么在代码里面去设置pdo
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//$pdo->setAttribute(3,2);
$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT,0);//$pdo->setAttribute(0,0);
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
//$pdo->setAttribute(19,2);
echo "\nPDO是否关闭自动提交功能:". $pdo->getAttribute(PDO::ATTR_AUTOCOMMIT);
echo "\n当前PDO的错误处理的模式:". $pdo->getAttribute(PDO::ATTR_ERRMODE);
echo "\n表字段字符的大小写转换: ". $pdo->getAttribute(PDO::ATTR_CASE);
echo "\n与连接状态相关特有信息: ". $pdo->getAttribute(PDO::ATTR_CONNECTION_STATUS);
echo "\n空字符串转换为SQL的null:". $pdo->getAttribute(PDO::ATTR_ORACLE_NULLS);
echo "\n应用程序提前获取数据大小:".$pdo->getAttribute(PDO::ATTR_PERSISTENT);
echo "\n与数据库特有的服务器信息:".$pdo->getAttribute(PDO::ATTR_SERVER_INFO);
echo "\n数据库服务器版本号信息:". $pdo->getAttribute(PDO::ATTR_SERVER_VERSION);
echo "\n数据库客户端版本号信息:". $pdo->getAttribute(PDO::ATTR_CLIENT_VERSION);
设置字符集
![在这里插入代码片](https://img-blog.csdnimg.cn/2020042800003684.png)
这个牛比,想起当初搞mysql的时候搞过一个天龙八部
mysqli_set_charset($link,"utf-8");
或者
$pdo->exec(“set names utf8”);
这个是不用连接的
天龙八部是啥?
新天龙八部来l
// 1. query($sql); 用于执行查询SQL语句。返回PDOStatement对象
// 2. exec($sql); 用于执行增、删、改操作,返回影响行数;
// 3. getAttribute(); 获取一个"数据库连接对象"属性。
// 4. setAttribute(); 设置一个"数据库连接对象"属性。
// 5. beginTransaction 开启一个事物(做一个回滚点)
// 6. commit 提交事务
// 7. rollBack 事务回滚操作。
// 8. errorCode 获取错误码
// 9. errorInfo 获取错误信息
// 10.lastInsertId 获取刚刚添加的主键值。
// 11.prepare 创建SQL的预处理,返回PDOStatement对象
// 12.quote 为sql字串添加单引号。
1.3.1 你需要知道的内部函数
- PDO::exec
执行一个sql语句,并且返回受影响的行数。
这句话对SELECT语句无效,可以移驾找他的兄弟语句PDD::query()
白嫖一个例子
$dbh = new PDO('odbc:sample', 'db2inst1', 'ibmdb2');
/* 删除 FRUIT 数据表中满足条件的所有行 */
$count = $dbh->exec("DELETE FROM fruit WHERE colour = 'red'");
/* 返回被删除的行数 */
print("Deleted $count rows.\n");
这尼玛太暴力了,直接用delete了
1.4 完整代码
代码:
$dsn = 'mysql:dbname=test;host=127.0.0.1'; //连接MySQL数据库的DSN
$user = 'root';
$password = 'root';
$pdo = new PDO($dsn, $user, $password);
//开启事务处理
$pdo->beginTransaction();
try {
//设置utf_8
$pdo->query("set names utf8");
$stmt = $pdo->query("SELECT * FROM kefu");
var_dump($stmt);
$array = [];
$mm = $stmt->fetchAll();
foreach ($mm as $k => $v) {
$array[] = [
'id'=>$v['id'],
'gonghao'=>$v['gonghao'],
'mima'=>$v['mima'],
'xingming'=>$v['xingming'],
];
}
} catch (PDOException $e) {
//回滚事务
$pdo->rollBack();
echo '数据库连接失败:' . $e->getMessage();
}
var_dump($array);
1.4.1 简单分析
-
execute() 负责执行一个准备好了的预处理语句
-
$pdo->commit();提交事务 $pdo->rollBack();回滚事务
-
php
-
三部曲
$dsn = 'mysql:dbname=test;host=127.0.0.1'; //连接MySQL数据库的DSN
$user = 'root';
$password = 'root';
$pdo = new PDO($dsn, $user, $password);
这三个是必备选项
- PDO::beginTransaction 启动一个事务(PHP 5 >= 5.1.0, PECL pdo >= 0.1.0) 在例子中是这个函数
$pdo->beginTransaction();
事务就是一个执行sql语句前的镜像备份。
- $stmt = $pdo->query(“SELECT * FROM kefu”);
这句话其实是回显已经执行的语句的。例如:
最好可以的话var_dump()一下
- 事务
// 事务:将多条sql操作(增删改)作为一个操作单元,要么都成
// 功,要么都失败。
// MySQL对事务的支持:
// 被操作的表必须是innoDB类型的表(支持事务)
// MySQL常用的表类型:MyISAM(非事务)增删改速度快、InnodB(事务型)安全性高
// 更改表的类型为innoDB类型
// mysql> alter table stu engine=innodb;
// Query OK, 29 rows affected (0.34 sec)
// Records: 29 Duplicates: 0 Warnings: 0
// mysql> show create table stu\G; //查看表结构