pdo-php学习-白帽子基础面向对象和数据库

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 你需要知道的内部函数
  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; //查看表结构
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值