<?php
//异常处理
try{ //写监听内容,遇异常扔包
$link = @mysqli_connect('127.0.0.1','root1','123');
if(!$link){
//实例化一个错误对象
$err = new Exception('链接数据库失败');
//抛出 错误对象
throw $err;
echo '这里的代码输出吗??';//不输出
}
echo '这里的代码输出吗??';//不输出
}catch(Exception $e){ //捕获 类型约束 $e是一个形参 就是抛出的异常对象
//错误信息处理
$str='错误消息:'.$e->getMessage().'#';//错误消息
$str.='错误代码:'.$e->getCode().'#';//异常代码
$str.='错误文件:'.$e->getFile().'#';//错误文件
$str.='错误行号:'.$e->getLine().'#';//错误行号
$str.='错误时间:'.time()."\n";//错误时间
// echo $str;//输出错误信息;
file_put_contents('error.log',$str,FILE_APPEND);//将错误信息写入文件
}; //详@12_9;当try监听区域遇到异常手动扔包后监听区域的脚本不再往下执行;注当PDO处在try监听区域出现异常时不需要手动扔包,系统内部会默认底层扔包;
-------------------------------------------------------------------------------------------------------------------------------------------
//PDO是一个类,使用PDO就是通过将PDO这个类实例化后进行相应数据库操作的过程;
$pdo = new PDO('mysql:host=localhost;dbname=lamp169;charset=utf8','root',''); //实例化
//使用PDO发送sql语句
$pdo->exec(这里写sql语句或sql语句赋给的变量名);//写用exec
delete update insert->有影响行数
返回值:影响行数
$pdo->query(这里写sql语句或sql语句赋给的变量名);//读用query
select desc show ->查询结果集
返回值:返回stmt预处理对象
//☆使用exec方法 发送插入语句
$sql='insert into user values(null,"zhangsan",21,1,"lamp169")';
$res = $pdo->exec($sql); //不要$link;
echo $pdo->lastInsertId(); //获取自增id
//☆使用exec方法 发送删除语句
$sql='delete from user where id=22';
$res = $pdo->exec($sql); //同原生态mysql_query($sql);
//☆使用query 进行查询操作
$sql='select * from user';
$stmt = $pdo->query($sql);// $stmt 预处理对象 结果集在这个对象内部
$res=$stmt->fetch(PDO::FETCH_ASSOC); //查询单条结果集
$res=$stmt->fetchAll(PDO::FETCH_ASSOC); //查询所有结果集
/*while($res = $stmt->fetch(PDO::FETCH_ASSOC)){ //查询所有结果集的另一种办法,不常用
echo '<pre>';
var_dump($res);
}*/
----------------------------------------------------------------------------------------------------------------------------
/*使用预处理-》防止sql注入*/
/*
防止sql注入的原因:
sql语句的结构和参数分离发送,第二次发送的参数即使有sql攻击的结构(or)
也不认为是sql的结构 ,认为是参数一部分
*/
try{
$pdo = new PDO('mysql:host=localhost;dbname=lamp169;charset=utf8','root','');
//sql语句的结构
$sql='delete from user where id=?';
//将语句的结构发送数据库
$stmt = $pdo->prepare($sql);// 编译(转化成二进制编码)-等待参数的绑定
//设置一个变量
$id='6 or 1=1';
//给?绑定参数 注意:绑定必须是变量而不能写变量的值
$stmt->bindParam(1,$id);//给编译好的语句结构绑定参数->sql语句完成
//执行完成的sql语句
$stmt->execute();
}catch(PDOException $e){
echo $e->getMessage();
}
------------------------------------------------------------------------------------------------------------------------------
//使用预处理发送查询语句
try{
$pdo = new PDO('mysql:host=localhost;dbname=lamp169;charset=utf8','root','');
//1.发送语句结构
$sql = 'select * from user where id>? and id<?';
$stmt=$pdo->prepare($sql);
//2.绑定参数
// $id1=5;
// $id2=10;
// $stmt->bindParam(1,$id1);
// $stmt->bindParam(2,$id2);
//3.执行sql语句
// $stmt->execute();
/*----------简化绑定参数-----------*/
$stmt->execute(array(1,10));//把数组的第一个单元给第一个问号绑定 第二个单元给第二个问号绑定
//4.查看结果集
$res =$stmt->fetchAll(PDO::FETCH_ASSOC);
var_dump($res);
}catch(PDOException $e){
echo $e->getMessage();
}
-------------------------------------------------------------------------------------------------------------------------------
//pdo事务处理
/*
前提条件:
a)要求表引擎是innodb
b)关闭自动提交 -》set autocommit=0;
1.什么叫事务?
把一组相关联的sql语句定义成事务
2.回滚事务
rollback :结束当前事务,回到begin 开始状态
3.提交事务
commit: 结束当前事务,真实修改表数据
*/
$num=9;
try{
$pdo =new PDO('mysql:host=localhost;dbname=lamp169;charset=utf8','root','');
//转账关系的事务
//1.关闭自动提交
$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT,0);//-->set autocommit=0
//2.开启一个事务
$pdo->beginTransaction();//-->begin
//3.执行sql语句
//a jiesao 转出9元
$res = $pdo->exec('update money set mon=mon-'.$num.' where id=1');
if($res<=0){
throw new Exception('杰嫂转出失败');
}
//b jiege 转入9元
$res = $pdo->exec('update money set mon=mon+'.$num.' where id=3');
if($res<=0){
throw new Exception('杰哥转入失败');
}
//4.事务提交
$pdo->commit(); //-->commit
}catch(Exception $e){
echo $e->getMessage();
//5.事务回滚
$pdo->rollback();//-->rollback
}
//6.开启自动提交
$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT,1);//-->set autocommit=1;
一些关于PDO的笔记
最新推荐文章于 2021-02-23 20:27:23 发布