PDO(php data object)+事务

本文介绍 PHP 中 PDO 类的使用方法,包括数据库连接、增删改查等操作,并演示了如何利用预处理语句提高安全性及效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//------------------------------
<?php 
//实例化PDO类,获取PDO类的类对象
$dsn = "mysql:host=localhost;dbname=cms";
$username = "root";
$password = "root";
$pdo = new PDO($dsn,$username,$password);
var_dump($pdo);
//------------------------------
<?php 
//成员方法 exec

$dsn = "mysql:host=localhost;dbname=cms";
$username = "root";
$password = "root";
$pdo = new PDO($dsn,$username,$password);
$query = "insert into cms_user
         (username,password)
          values
          ('tom','tom123')";
var_dump($pdo->exec($query));
//------------------------------
<?php 
//成员方法 exec

$dsn = "mysql:host=localhost;dbname=cms";
$username = "root";
$password = "root";
$pdo = new PDO($dsn,$username,$password);
$query = "insert into cms_user
         (username,password)
          values
          ('tom','tom123')";
var_dump($pdo->exec($query));
//------------------------------
<?php 
//获取上一次insert产生的id
//2、应用PDO类,
//在cms_user表中插入一条数据,获取插入数据的ID
$dsn = "mysql:host=localhost;dbname=cms";
$username = "root";
$password = "root";
$pdo = new PDO($dsn,$username,$password);
$query = "insert into cms_user
         (username,password)
          values
          ('tom1','tom123')";
var_dump($pdo->exec($query));
echo "<br/>";
echo "id:".$pdo->lastInsertId();
//------------------------------
<?php 
//query
$dsn = "mysql:host=localhost;dbname=cms";
$username = "root";
$password = "root";
$pdo = new PDO($dsn,$username,$password);
$query = "select id,username,password from 
          cms_user";
$pdostatm = $pdo->query($query);
//3、应用PDO类,查询cms_user表,
//将表中查询到的数据输出出来。
foreach($pdostatm as $value){
    //$value就是查询的每行数据内容
    // value是数组 是关联和索引数组
    echo $value['id'];
    echo "#".$value['username'];
    echo "#".$value['password'];
    echo "<br/>";

}
//------------------------------
<?php 
//3、应用PDO类,查询cms_user表,
//将表中查询到的数据输出出来。
// 实例化PDO类
$dsn = "mysql:host=localhost;dbname=cms";
$username = "root";
$password = "root";
$pdo = new PDO($dsn,$username,$password);
$query = "select id,username,password 
          from cms_user";
$statm = $pdo->query($query);
foreach($statm as $value){
    echo "id=".$value['id'];
    echo "username=".$value['username'];
    echo "password=".$value['password'];
    echo "<br/>";
}
//------------------------------
<?php 
/*
 * 1、应用PDO类完成向项目的数据库表cms_user
* 中更新一条数据,观察更新后的返回。
*/
$dsn = "mysql:host=localhost;dbname=cms";
$username = "root";
$password = "root";
$pdo = new PDO($dsn,$username,$password);

$id = $_GET['id'];
$query = "update cms_user set password='123'
         where id='".$id."'";
echo $query;
var_dump($pdo->exec($query));
//------------------------------
<?php 
//PDO准备语句
/*
 * 4、应用PDO准备语句。在数据库表cms_user中更新数据,]
 * 将任意一个用户的密码改为123
 */
$dsn = "mysql:host=localhost;dbname=cms";
$username = "root";
$password = "root";
$pdo = new PDO($dsn,$username,$password);
//PDO通知mysql编译sql语句,此时sql语句不执行
$query = "insert into cms_user
          (username,password)
          values
          ('jack1','123')";
$statm = $pdo->prepare($query);

//PDOSStatement通知mysql执行sql语句
var_dump($statm->execute());
//------------------------------
<?php 
header("Content-Type:text/html;charset=utf-8");
//PDO准备语句
/*
 * 4、应用PDO准备语句。在数据库表cms_user中更新数据, * 
 * 将任意一个用户的密码改为123
 */
$dsn = "mysql:host=localhost;dbname=cms";
$username = "root";
$password = "root";
$pdo = new PDO($dsn,$username,$password);
//PDO通知mysql对sql语句进行编译
$query = "update cms_user set
          password='456'
          where id=15";
$statm = $pdo->prepare($query);

//PDOStatment 通知mysql执行sql语句
$result = $statm->execute();
if($result){
    echo "执行成功";
}else{
    echo "执行失败";
}

//------------------------------
<?php 
header("Content-Type:text/html;charset=utf-8");
$dsn = "mysql:host=localhost;dbname=cms";
$username = "root";
$password = "root";
$pdo = new PDO($dsn,$username,$password);
//PDO通知mysql对sql语句进行编译

$query = "update cms_user set
          password=?
          where id=?";
$statm = $pdo->prepare($query);
//参数绑定
$password = "789";
//1,2代表?的位置,第二个一定
$statm->bindParam(1,$password);
$id = 14;
$statm->bindParam(2,$id);

//PDOStatment 通知mysql执行sql语句
$result = $statm->execute();
if($result){
    echo "执行成功";
}else{
    echo "执行失败";
}
//------------------------------
<?php 
header("Content-Type:text/html;charset=utf-8");
/*
 * 5、应用PDO准备语句。在数据库表cms_user中更新数据。
* 将用户id用参数 ?形式指定。执行sql语句后输出执行结果。
*/
$dsn = "mysql:host=localhost;dbname=cms";
$username = "root";
$password = "root";
$pdo = new PDO($dsn,$username,$password);
//PDO通知Mysql编译sql语句
$query = "update cms_user set username='john'
          where id=?";
$statm = $pdo->prepare($query);
//参数绑定
$id = 14;
$statm->bindParam(1,$id);
//PDOStatement类通知mysql执行SQL语句
$result = $statm->execute();
if($result){
    echo "执行成功";
}else{
    echo "执行失败";
}

//------------------------------
<?php 
header("Content-Type:text/html;charset=utf-8");
$dsn = "mysql:host=localhost;dbname=cms";
$username = "root";
$password = "root";
$pdo = new PDO($dsn,$username,$password);
//PDO通知mysql对sql语句进行编译
//6、应用PDO准备语句。删除cms_user表中的一条数据,
//要求制定where条件时id为参数。
$query = "update cms_user set
          password=:password
          where id=:id";
$statm = $pdo->prepare($query);
//绑定参数
$password = "5678";
$statm->bindParam(":password",$password);
$id = 8;
$statm->bindParam(":id",$id);
//PDOStatment 通知mysql执行sql语句
$result = $statm->execute();
if($result){
    echo "执行成功";
}else{
    echo "执行失败";
}
//------------------------------
<?php 
header("Content-Type:text/html;charset=utf-8");
$dsn = "mysql:host=localhost;dbname=cms";
$username = "root";
$password = "root";
$pdo = new PDO($dsn,$username,$password);
//PDO通知mysql对sql语句进行编译
//6、应用PDO准备语句。删除cms_user表中的一条数据,
//要求制定where条件时id为参数。
//PDO通知mysql编译sql语句
$query = "delete from cms_user where id=:id";
$statm = $pdo->prepare($query);
//参数绑定
$id = 9;
$statm->bindParam(":id",$id);
//执行
$result = $statm->execute();
if($result){
    echo "被影响行数:".$statm->rowCount();
    echo "执行成功";
}else{
    echo "执行失败";
}
//------------------------------
<?php 
//获取有返回结果集的sql语句操作的结果
header("Content-Type:text/html;charset=utf-8");
$dsn = "mysql:host=localhost;dbname=cms";
$username = "root";
$password = "root";
$pdo = new PDO($dsn,$username,$password);
//PDO通知mysql编译sql语句
$query = "select id,username,password from cms_user";
$statm = $pdo->prepare($query);
//执行
$statm->execute();
//获取查询的结果
var_dump($statm->fetch());
echo "<hr/>";
var_dump($statm->fetch(PDO::FETCH_BOTH));

echo "<hr/>";
var_dump($statm->fetch(PDO::FETCH_NUM));
echo "<hr/>";
var_dump($statm->fetch(PDO::FETCH_ASSOC));
echo "<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>";

//------------------------------
<?php 
//获取有返回结果集的sql语句操作的结果
header("Content-Type:text/html;charset=utf-8");
$dsn = "mysql:host=localhost;dbname=cms";
$username = "root";
$password = "root";
$pdo = new PDO($dsn,$username,$password);
//PDO通知mysql编译sql语句
$query = "select id from cms_user";
$statm = $pdo->prepare($query);
//执行
$statm->execute();
/*
 * 7、应用PDO准备语句,对cms_user表进行查询,
 * 将获取的结果以关联数组返回。循环获取查询的结果。
 */
//获取查询的结果
//while($row = $statm->fetch(PDO::FETCH_ASSOC)){
var_dump($statm->fetch(PDO::FETCH_ASSOC));
//}
//------------------------------
<?php 
//获取有返回结果集的sql语句操作的结果
header("Content-Type:text/html;charset=utf-8");
$dsn = "mysql:host=localhost;dbname=cms";
$username = "root";
$password = "root";
$pdo = new PDO($dsn,$username,$password);
//PDO通知mysql编译sql语句
$query = "select id from cms_user where id=:id";
$statm = $pdo->prepare($query);
//参数绑定
$id = 10;
$statm->bindParam(":id",$id);
//执行
$statm->execute();
/*
 * 7、应用PDO准备语句,对cms_user表进行查询,
 * 将获取的结果以关联数组返回。循环获取查询的结果。
 */
//获取查询的结果
//while($row = $statm->fetch(PDO::FETCH_ASSOC)){
var_dump($statm->fetch(PDO::FETCH_ASSOC));
//}
//------------------------------
<?php 
//获取有返回结果集的sql语句操作的结果
header("Content-Type:text/html;charset=utf-8");
$dsn = "mysql:host=localhost;dbname=cms";
$username = "root";
$password = "root";
$pdo = new PDO($dsn,$username,$password);
//PDO通知mysql编译sql语句

$query = "select id from cms_user";
$statm = $pdo->prepare($query);

//执行
$statm->execute();
echo "被影响行数:".$statm->rowCount();

//------------------------------
<?php 
//获取有返回结果集的sql语句操作的结果
header("Content-Type:text/html;charset=utf-8");
$dsn = "mysql:host=localhost;dbname=cms";
$username = "root";
$password = "root";
$pdo = new PDO($dsn,$username,$password);
/*
 * 8、应用PDO准备语句,对cms_user表进行查询,
 * 将获取的结果以关联数组返回。循环获取查询的结果。
 * 将获取到的结果输出到table表格中。
 *  在表格的最后输出:共**行数据
 */
//PDO通知mysql编译sql语句
$query = "select id,username,password from cms_user";
$statm = $pdo->prepare($query);
//执行
$statm->execute();
//循环获取结果
echo "<table border='1' widht='500'>";
echo "<tr><th>ID</th><th>用户名</th><th>密码</th></tr>";
while($row = $statm->fetch(PDO::FETCH_ASSOC)){
    echo "<tr>";
    echo "<td>".$row['id']."</td>";
    echo "<td>".$row['username']."</td>";
    echo "<td>".$row['password']."</td>";
    echo "</tr>";   
}
echo "<tr><td colspan='3'>共".$statm->rowCount()."行</td></tr>";
echo "</table>";

//事务-------------------------
<?php
header('Content-Type:text/html;charset=utf-8');
//实例化PDO类,获取PDO类的类对象
$dsn = "mysql:host=localhost;dbname=cms2";
$username = 'root';
$password = 'root';
$pdo = new PDO($dsn, $username, $password);
//关闭自动提交
$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT, 0);
//开始事务
$pdo->beginTransaction();
//根据sql执行的返回结果,判断是提交还是回滚
$query = "update deel set money=money+50 where id=1";
$result_1=$pdo->exec($query);

$query = "update deel set money=money-50 where id=2";
$result_2=$pdo->exec($query);
if ($result_1 && $result_2) {
    $pdo->commit();
    echo '交易成功';
} else {
    $pdo->rollBack();
    echo '交易失败';
}
//开启自动提交
$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT, 1);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值