PHP PDO 连接操作数据库

PHP PDO 连接操作数据库

PDO链接mysql

// PDO连接数据库
// 创建三个变量存放数据库地址,用户名和密码
$servername = '192.168.20.222';
$username = 'root';
$password = 'root';
// 创建链接
try {
    $conn = new PDO("mysql:host=$servername",$username,$password);
    echo '数据库连接成功';
}catch (PDOException $e){
    echo $e->getMessage();
}

PDO断开链接

// 断开连接
$conn = null;

PDO创建数据库

$servername = '192.168.20.222';
$username = 'root';
$password = 'root';

try {
    $conn = new PDO("mysql:host=$servername",$username,$password);
    // 设置PDO为异常模式
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    // 设置创建数据库的sql语句
    $sql = 'create database phplx';
    // 使用exec();因为没有返回结果
    $conn->exec($sql);
    echo '数据库创建成功';
}catch (PDOException $e){
    echo $e->getMessage();
}

PDO创建表

$servername = '192.168.20.222';
$username = 'root';
$password = 'root';
$dbname = 'phplx';

try {
    // 链接数据库并选择数据库名
    $conn = new PDO("mysql:host=$servername;dbname=$dbname",$username,$password);
    // 设置PDO为异常模式
    $conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
    // 设置sql语句:
    $sql = 'create table lxphp(
    id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    firstname VARCHAR(30) NOT NULL,
    lastname VARCHAR(30) NOT NULL,
    email VARCHAR(50),
    reg_date TIMESTAMP
)';
    // 使用exec()因为没有返回值
    $conn->exec($sql);
    echo '数据表创建成功';
}catch (PDOException $e){
    echo $e->getMessage();
}
// 关闭数据库连接
$conn = null;

PDO插入数据

$servername = '192.168.20.222';
$username = 'root';
$passwd = 'root';
$dbname = 'phplx';

try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname",$username,$passwd);
    $conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
    $sql = "insert into lxphp(firstname, lastname, email)
values ('zhang','san','1666666@qq.com')";
    $conn->exec($sql);
    echo '插入成功';
}catch (PDOException $e){
    echo $e->getMessage();
}
$conn = null;

插入多条数据:

$servername = '192.168.20.222';
$username = 'root';
$passwd = 'root';
$dbname = 'phplx';

try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname",$username,$passwd);
    // 设置异常模式
    $conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
    // 开始事务
    $conn->beginTransaction();
    // 执行sql
    $conn->exec("insert into lxphp(firstname, lastname, email) values ('li','si','23865516@qq.com')");
    $conn->exec("insert into lxphp(firstname, lastname, email) values ('wang','wu','12345678@qq.com')");
    $conn->exec("insert into lxphp(firstname, lastname, email) values ('da','niu','87654321@qq.com')");
    // 结束事务
    $conn->commit();
    echo '插入成功';
}catch (PDOException $e){
    // 如果出现故障,则回滚事务
    $conn->rollBack();
    echo $e->getMessage();

预处理:

$servername = '192.168.20.222';
$username = 'root';
$passwd = 'root';
$dbname = 'phplx';

try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname",$username,$passwd);
    $conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
    // 预处理sql并绑定参数
    $stmt = $conn->prepare("insert into lxphp(firstname, lastname, email) values (:firestname,:lastname,:email)");
    $stmt->bindParam(':firestname',$firestname);
    $stmt->bindParam(':lastname',$lastname);
    $stmt->bindParam(':email',$email);
    // 插入数据
    $firestname = 'zhang';
    $lastname = 'san';
    $email = '123456@qq.com';
    $stmt->execute();
    // 插入第二条数据
    $firestname = 'li';
    $lastname = 'si';
    $email = '654321@qq.com';
    $stmt->execute();
    // 常如第三条数据
    $firestname = 'wang';
    $lastname = 'wu';
    $email = '123466789@qq.com';
    $stmt->execute();

    echo '数据已插入';

}catch (PDOException $e){
    echo $e->getMessage();
}
$conn = null;

PDO查询数据

try {
    $sql="select * from cash";
    // 有返回结果集,使用query函数,该函数返回结果为预处理对象。
    $stmt = $conn->query($sql);
    // 查询多条数据,设置返回为关联数组
    $res = $stmt->fetchAll(PDO::FETCH_ASSOC);
    foreach ($res as $v){
        echo 'id为:'.$v['id'].',名字为:'.$v['name'].',财产为:'.$v['money'].'<br/>';
    }
}catch (PDOException $e){
    echo $e->getMessage();
}

PDO事务

// 连接数据库
$servername = '127.0.0.1';
$username = 'admin';
$password = '123456';
$dbname='www_myblog_com';
try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname",$username,$password);
    $conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
    // 关闭pdo自动提交
    $conn->setAttribute(PDO::ATTR_AUTOCOMMIT,0);
    // 开启事务
    $conn->beginTransaction();
    // 张三转出100元钱
    $sql = "update cash set money=money-100 where name='张三'";
    $row = $conn->exec($sql);
    if (!$row){
        // 若未成功转出,即$row不存在,则抛出异常
        throw new PDOException('转出失败!');
    }
    // 若张三成功转出,李四加100元钱
    $sql = "update cash set money=money+100 where name='李四'";
    $row = $conn->exec($sql);
    if (!$row){
        throw new PDOException('转入失败!');
    }
    // 若两步都没问题则提交事务
    $conn->commit();
    echo '汇款成功';
}catch (PDOException $e){
    echo $e->getMessage();
    // 出现错误则回滚事务
    $conn->rollBack();
}
// 开启自动提交
$conn->setAttribute(PDO::ATTR_AUTOCOMMIT,1);

PDO预处理

什么是预处理?为了提高效率和防止sql注入等安全问题,使用预处理令mysql服务先对sql语句进行编译,等待传入参数,那么接下来我们传入参数时将不会在编译,参数里的逻辑运算将不会再执行。

?:占位符,用来代表预处理的参数。

::一个冒号,用来声明预处理变量。

prepare():准备函数,将sql语句传递给sql服务端进行编译,并且返回预处理对象。

execute():执行函数,将参数传递给预处理并执行。

预处理插入数据(占位符实例):
<?php
include ('pdo.php');

try {
    // ?为占位符
    $sql = "insert into cash(name, money) VALUE (?,?)";
    // 准备函数
    $stmt = $conn->prepare($sql);
    // 绑定预处理变量,三个参数,第一个为占位符,第二个为变量,第三个为数据类型一般不写
    // 这里1代表第一个占位符
    $stmt->bindParam(1,$name);
    $stmt->bindParam(2,$money);
    // 参数赋值
    $name = '王五';
    $money = 2000;
    // 开始执行
    $stmt->execute();
//    // 简写,用该方法可以直接插入不绑定,使用?占位符的话,列表为索引列表
//    $stmt->execute(array('老刘','3000'));
    echo '数据已插入';
}catch (PDOException $e){
    echo $e->getMessage();
}
预处理查询(使用单冒号)

fetch()、fetchall():提取一条数据、提取多条数据,可设置返回什么样的数组(一搬为’PDO::FETCH_ASSOC’关联数组)。

<?php
include ('pdo.php');
try {
    $sql = "select * from cash where id=:id";
    // 准备函数
    $stmt = $conn->prepare($sql);
    // 绑定变量
    $stmt->bindParam(':id',$id);
    // 变量赋值
    $id=1;
    // 执行查询
    $stmt->execute();
    // fetch()提取一条数据fetchall()提取多条数据,提取数据用res变量接收
    // 这里的'PDO::FETCH_ASSOC'代表结果设为关联数组返回
    $res = $stmt->fetch(PDO::FETCH_ASSOC);
    var_dump($res);
	// // 返回查询结果为几条数据
    // var_dump($stmt->rowCount());
}catch (PDOException $e){
    echo $e->getMessage();
}
  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小洋葱头头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值