IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> PHP开发-PDO操作数据库 -> 正文阅读

[PHP知识库]PHP开发-PDO操作数据库

一. PDO 操作

  1. 采用预处理操作(PDOStatment类,prepare()方法)
  2. 采用命令占位符
    请添加图片描述

PHP使用PDO操作数据库步骤

  1. 连接数据库,创建PDO对象
    $pdo = new($dsn,$user,$pass);
  2. 执行预处理方法,创建预处理对象
    $stmt = $pdo->prepare($sql);
  3. 执行查询
    $stmt->execute();
  4. 解析结果集
    $stmt->fetchAll();
  5. 遍历结果集
    foreach()

1.1 POD连接关闭数据库

PDO类

PDO($dsn,$user,$pass)

<?php
/**
 * Dev: wp
 * Date:2022-03-09
 * Source:PhpStorm
 * File:PDO.php
 */

$type = 'mysql';
$host = '127.0.0.1';
$dbname = 'test';
$username = 'root';
$password = '';
$charset = 'utf8';
$port = 3306;

$dsn = "$type:host=$host;dbname=$dbname;charset=$charset;port=$port";
try {
    $pdo = new PDO($dsn, $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}
if ($pdo){
    echo 'Connected successfully';
    $pdo = null;
}

1.2 操作数据库

主要使用 PDOStatement 类 预处理对象

请添加图片描述

<?php
/**
 * Dev: wp
 * Date:2022-03-09
 * Source:PhpStorm
 * File:PDO.php
 */

$type = 'mysql';
$host = '127.0.0.1';
$dbname = 'test';
$username = 'root';
$password = '';
$charset = 'utf8';
$port = 3306;

// 连接数据库
$dsn = "$type:host=$host;dbname=$dbname;charset=$charset;port=$port";
try {
    $pdo = new PDO($dsn, $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}

// 创建预处理对象,:id 为命名参数
$sql = "SELECT id,question FROM question WHERE id > :id";
// prepare 对象是pdo类的方法,用于解析sql语句
$stmt = $pdo->prepare($sql);
// 执行sql语句
// 也可以通过 setFetchMode 设置关联模式
// $stmt->setFetchMode(PDO::FETCH_ASSOC);
if ($stmt->execute(['id' => 310])) {
    // 解析结果集 PDO::FETCH_ASSOC 只获取关联数组
    $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
} else {
    print_r('查询失败'.$stmt->errorInfo());
}
// 遍历结果集
foreach ($result as $row) {
    echo $row['id'] . ' ' . $row['question'] . '<br>';
}
echo '查询到'. count($result) . '条记录';

fetch

在 fetch 中,每次执行后 指针会下移,如果不想使用

// 预处理对象
$sql = "SELECT id,question FROM question WHERE id > :id";
$stmt = $pdo->prepare($sql);
$stmt->execute(['id' => 315]);
// 解析结果集
$row = $stmt->fetch(PDO::FETCH_ASSOC);
print_r($row);
$row = $stmt->fetch(PDO::FETCH_ASSOC);
print_r($row);

请添加图片描述

1.3 参数绑定与结果集解析

参数绑定

  • 参数绑定
    bindParam(':占位符',变量,类型常量).类型常量默认字符串;
    bindValue(':点位符',值或变量,类型常量),如果直接传值可忽略类型常量'
    execute([':占位符'=>值/变量]):将参数以数组方式与sql语句的占位符绑定;
  • 列绑定
    bindColumn('列名或索引',变量,变量类型,最大长度),如果是字符串类型,应该指出最大长度进行分配;

bindParam 只支持变量,而bindValue支持字面量

// 预处理对象
$sql = "SELECT id,question FROM question WHERE id > :id";
$stmt = $pdo->prepare($sql);
// 参数绑定 bindParam
$id_num = 315;
$stmt->bindParam(':id', $id_num , PDO::PARAM_INT);
// 执行sql语句
$stmt->execute();
// 结果集绑定变量
$stmt->bindColumn(1,$id,PDO::PARAM_INT);
$stmt->bindColumn(2,$question,PDO::PARAM_STR,1000);
// 结果集绑定
while ($stmt->fetch(PDO::FETCH_BOUND)){
//    echo $id." ".$question."<br/>";
//    转换位数组
    $rows[] = compact('id','question');
}
// 遍历数组
foreach ($rows as $row){
    echo $row['id']." ".$row['question']."<br/>";
}

请添加图片描述

1.4 PDO 增

  • rowCound()方法:返回受影响的记录数量
  • errorinfo()方法:返回出错格式(数组格式)
// PDO对象
$dsn = "$type:host=$host;dbname=$dbname;charset=$charset;port=$port";
try {
    $pdo = new PDO($dsn, $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}
// 预处理对象
$sql = "insert into test values(id,:name)";
$stmt = $pdo->prepare($sql);
// 参数绑定
$name = 'wpsec';
$stmt->bindParam(':name', $name, PDO::PARAM_STR);
if ($stmt->execute()){
    if ($stmt->rowCount()){
        echo '插入成功';
    }
}else{
    print_r($stmt->errorInfo() . '插入失败');
    die;
}

1.5 PDO 删

// PDO对象
$dsn = "$type:host=$host;dbname=$dbname;charset=$charset;port=$port";
try {
    $pdo = new PDO($dsn, $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}
// 预处理对象
$sql = "delete from test.test where id = :id";
$stmt = $pdo->prepare($sql);
// 参数绑定
$id = 6;
$stmt->bindParam(':id', $id, PDO::PARAM_INT);
if ($stmt->execute()){
    if ($stmt->rowCount()){
        echo '删除成功';
    }
}else{
    print_r($stmt->errorInfo() . '删除失败');
    die;
}

请添加图片描述

1.5 PDO 改

// PDO对象
$dsn = "$type:host=$host;dbname=$dbname;charset=$charset;port=$port";
try {
    $pdo = new PDO($dsn, $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}
// 预处理对象
$sql = "update test.test set name = :name where id = :id";
$stmt = $pdo->prepare($sql);
// 参数绑定
$name = 'wp';
$stmt->bindParam(':name', $name, PDO::PARAM_STR);
$stmt->bindValue(':id',2, PDO::PARAM_INT);
if ($stmt->execute()){
    if ($stmt->rowCount()){
        echo '更新成功';
    }
}else{
    print_r($stmt->errorInfo() . '更新失败');
    die;
}

请添加图片描述

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-03-12 17:13:32  更:2022-03-12 17:13:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 10:36:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码