php pdo基础代码,PHP PDO 基础(常用)

标签:

连接数据库:

#建立链接

define('DSN','mysql:dbname=C2C;host=localhost;port=3306');

define('MYSQL_USERNAME','root');

define('MYSQL_PWD','root');

try {

$DB=new PDO(DSN,MYSQL_USERNAME,MYSQL_PWD,array(PDO::ATTR_PERSISTENT => true));

} catch (\Throwable $th) {

var_dump($th->getLine());

}

如果需要数据库长连接,需要最后加一个参数:array(PDO::ATTR_PERSISTENT => true);

执行SQL语句:

$DB::query(); #用于有记录结果的返回操作 如SELECT;

$DB::exec(); #用于没有结果集的返回操作 如INSERT UPDATE等操作;

exec()返回值是受影响的行数;

获取结果:

PDOStatement::fetch(); 获取一条记录;

PDOStatement::fetchAll();获取全部的记录集;

#返回关联数组

fetch(PDO::FETCH_ASSOC);

fetchAll(PDO::FETCH_ASSOC);

PDO设置属性 (设置PDO在处理数据的过程中采用什么方式去处理)

PDO::setAttribute:设置属性

PDO::getAttribute:获取属性

PDO事务控制

$DB->beginTransaction();#开启事务;

$DB->rollback();#事务回滚;

$DB->commit()#事务提交

$DB->setAttribute(PDO::ATTR_AUTOCOMMIT,1);#自动提交

PDO预处理

$sql='???';#暂时不赋值,用问号或者:name代替

$DB->prepare($sql);#创建预编译对象;

$DB->prepare($sql)->bind_param();#参数赋值

$DB->execute();#执行代码;

案例:

通过PDO去数据库获取指定的数据:

try{

$sql="SELECT id,username FROM cf_member where id>89096 AND id<90000";

$data=$DB->query($sql);

#$data=$data->fetch(PDO::FETCH_ASSOC);

$data=$data->fetchAll(PDO::FETCH_ASSOC);

var_dump($data);

} catch (\Throwable $th){

var_dump($th->getMessage());

}

通过PDO对数据库的内容进行修改:

try {

$sql='UPDATE cf_member SET money_1=100 WHERE id=89096';

$res=$DB->exec($sql);

var_dump($res); #exec返回值是被影响的数据行数;如果没有修改到任何数据应该返回0

} catch (\Throwable $th) {

var_dump($th->getMessage());

}

PDO事务控制:

在开启mysql事务后系统会关闭自动提交 在SQL语句执行完后需要打开自动提交

try{

#模拟转账操作

$sql='UPDATE cf_member SET money_1=money_1-100 WHERE id=89096';

#id99999并不存在所以会执行在if判断中会抛出错误 触发事务必回滚

#$sql2='UPDATE cf_member SET money_1=money_1+100 WHERE id=999999';

$sql2='UPDATE cf_member SET money_1=money_1+100 WHERE id=89108';

#开启mysql事务

$DB->beginTransaction(); #开启事务

if( $DB->exec($sql)>0 &&$DB->exec($sql2)>0){

$DB->commit(); #提交事务

$DB->setAttribute(PDO::ATTR_AUTOCOMMIT,1); #自动提交

echo '转账成功';

}else{

throw new \Exception('出现错误');

}

} catch(\Throwable $th){

#捕获到一次回滚事务

echo '触发回滚事物
';

var_dump($th->getMessage());

$DB->rollback(); #回滚事务

}

PDO数据预处理 PDO预处理可以有效的防止SQL注入:

try {

$id=$_GET['id']??89096; #php7写法

$num=$_GET['num']??1000;

if(is_numeric($id)&&is_numeric($num)){

$sql='UPDATE cf_member set money_1=money_1+:num WHERE id=:id';

$stmt=$DB->prepare($sql);

// $stmt->bindParam(':num',$num);

// $stmt->bindParam(':id',$id);

// $res=$stmt->execute(); #使用bindParam挨个绑定参数的方法

$res=$stmt->execute([':id'=>$id,':num'=>$num]); #可以在execute中传入一个和值绑定的数组进行sql查询

var_dump($res);

}else{

throw new Exception("GET数据非数值类型", 1);

}

} catch (\Throwable $th) {

var_dump($th->getMessage());

}

使用数组执行一条含有 IN 子句的预处理语法

#PDO预处理不支持绑定数组 使用in语句进行查询需要把使用implode函数把数组转换成字符串

try {

#方法1:

$array=['89096','89108','89220'];

#同时对三个ID进行数据操作

$in=implode(',', array_fill(0, count($array), '?'));

$sql="UPDATE cf_member SET money_1=100 WHERE id IN ($in)";

#预处理语句

$res=$DB->prepare($sql);

$res=$res->execute($array);

var_dump($res);

#方法2 不用绑定

$ids = array(2344, 5523, 9332);

// 过滤ids略

$in = implode(',',$ids);

$st = $pdo->prepare('SELECT * FROM table_name WHERE id IN ('.$in.')');

$st->execute();

} catch (\Throwable $th) {

var_dump($th->getMessage());

}

标签:

来源: https://www.cnblogs.com/LiChen-789/p/10162612.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值