前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP中PDO的基本使用

PHP中PDO的基本使用

作者头像
岳泽以
发布2023-04-23 17:04:26
1.3K0
发布2023-04-23 17:04:26
举报
文章被收录于专栏:岳泽以博客岳泽以博客

连接MySQL

代码语言:javascript
复制
<?php
$servername = "localhost";
$username = "username";
$password = "password";
 
try {
    $conn = new PDO("mysql:host=$servername;", $username, $password);
    echo "连接成功"; 
}
catch(PDOException $e)
{
    echo $e->getMessage();
}
?>

代码语言:javascript
复制
<?php
/*数据库配置*/
$dbconfig = array(
  'host' => 'localhost', //数据库服务器
  'port' => 3306, //数据库端口
  'user' => 'username', //数据库用户名
  'pwd' => 'password', //数据库密码
  'dbname' => 'dbname' //数据库名
);

// 检测链接
try {
  // 创建链接
  $conn = new PDO("mysql:host=" . $dbconfig['host'] . ";dbname=" . $dbconfig['dbname'] . ";port=" . $dbconfig['port'], $dbconfig['user'], $dbconfig['pwd']);
  // 设置 PDO 错误模式,用于抛出异常
  $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  echo "连接成功"; 
} catch (PDOException $e) {
  echo $e->getMessage();
}

// 关闭数据库链接
// $conn = null;

查询数据

代码语言:javascript
复制
<?php
// 链接数据库
require_once('conn.php');
try {
  // 数据库语句
  $sql = "select * from nav";
  // 有返回结果集,使用query函数,该函数返回结果为预处理对象。
  $stmt = $conn->query($sql);
  // 默认输出
  var_dump($stmt);
  } catch (PDOException $e) {
  echo $e->getMessage();
}

PDO+预处理

代码语言:javascript
复制
<?php
// 链接数据库
require_once('conn.php');
try {
  // 数据库语句
  $sql = "select * from nav";
  // prepare+execute用于预处理,使sql语句灵活了很多,也可用防止SQL注入等问题。
  $stmt = $conn->prepare($sql);
  $stmt->execute();
  // 默认输出
  var_dump($stmt);
  } catch (PDOException $e) {
  echo $e->getMessage();
}

以上俩种均可读取数据库数据,但是query()用于简单查询,而prepare()强大安全。

参数

说明

PDO::FETCH_ASSOC

从结果集中获取以列名为索引的关联数组。

PDO::FETCH_NUM

从结果集中获取一个以列在行中的数值偏移量为索引的值数组。

PDO::FETCH_BOTH

默认值,包含以上两种数组。

PDO::FETCH_OBJ

从结果集当前行的记录中获取其属性对应各个列名的一个对象。

PDO::FETCH_BOUND

使用fetch()返回TRUE,并将获取的列值赋给在bindParm()方法中指 定的相应变量。

PDO::FETCH_LAZY

创建关联数组和索引数组,以及包含列属性的一个对象,从而可以在这三种接口中任选一种。

fetch()方法

fetch()方法可以将结果集中当前的记录以某种方式返回,并将结果集指针移至下一行,当到达结果集末尾时返回FALSE。

代码语言:javascript
复制
<?php
// 链接数据库
require_once('conn.php');
try {
  // 数据库语句
  $sql = "select * from nav";
  // 有返回结果集,使用query函数,该函数返回结果为预处理对象。
  $stmt = $conn->query($sql);
  // 使用fetch()方法,获取关联数组
  $res = $stmt->fetch(PDO::FETCH_ASSOC);
  // 输出一个关联数组
  var_dump($res);
  echo '</br></br>';
  // 只输出单个值
  echo 'id为:' . $res['id'];
  echo '</br></br>';
  // 循环输出查询到的所有结果并换行
  foreach ($res as $v) {
    echo $v . '</br>';
  }
  } catch (PDOException $e) {
  echo $e->getMessage();
}
输出结果
输出结果

fetchAll()方法

fetchAll()方法与fetch()类似,但是该方法只需要调用一次就可以获取结果集中的所有行,并赋给返回的数组(二维)。

代码语言:javascript
复制
<?php
// 链接数据库
require_once('conn.php');
try {
  // 数据库语句
  $sql = "select * from nav";
  // 有返回结果集,使用query函数,该函数返回结果为预处理对象。
  $stmt = $conn->query($sql);
  // 使用fetchall()方法,获取关联数组
  $res = $stmt->fetchAll(PDO::FETCH_ASSOC);
  // 输出一个二维数组
  var_dump($res);
  echo '</br></br>';
  // 循环输出查询到的所有结果
  foreach ($res as $v) {
    echo $v['id'] . '</br>';
    echo $v['navname'] . '</br>';
    echo $v['navlink'] . '</br>';
    echo '</br>';
  }
} catch (PDOException $e) {
  echo $e->getMessage();
}
输出结果
输出结果

setFetchMode()方法

fetch()fetchAll()两个方法,数字索引和关联索引都有,属于浪费资源,而setFetchMode()可以设置结果集的。

代码语言:javascript
复制
<?php
// 链接数据库
require_once('conn.php');
try {
  // 数据库语句
  $sql = "select * from nav";
  // 有返回结果集,使用query函数,该函数返回结果为预处理对象。
  $stmt = $conn->query($sql);
  // 设置结果集为关联数组
  $stmt->setFetchMode(PDO::FETCH_ASSOC);
  //fetchAll()方法
  $res = $stmt->fetchAll();
  // 输出一个二维数组
  var_dump($res);
  echo '</br></br>';
  // 循环输出查询到的所有结果
  foreach ($res as $v) {
    echo $v['id'] . '</br>';
    echo $v['navname'] . '</br>';
    echo $v['navlink'] . '</br>';
    echo '</br>';
  }
} catch (PDOException $e) {
  echo $e->getMessage();
}

fetchColumn()

代码语言:javascript
复制
<?php
// 链接数据库
require_once('conn.php');
try {
  // 数据库语句
  $sql = "select * from nav";
  // 有返回结果集,使用query函数,该函数返回结果为预处理对象。
  $stmt = $conn->query($sql);
  // 默认获取默认获取当前行的第1列
  echo $stmt->fetchColumn();
  echo '  </br>';
  // 获取当前行第一列
  echo $stmt->fetchColumn(1);
} catch (PDOException $e) {
  echo $e->getMessage();
}

rowCount()和columCount()

代码语言:javascript
复制
<?php
// 链接数据库
require_once('conn.php');
try {
  // 数据库语句
  $sql = "select * from nav";
  // 有返回结果集,使用query函数,该函数返回结果为预处理对象。
  $stmt = $conn->query($sql);
  // 获取总行数、总列数
  echo '总行数:' . $stmt->rowCount() . '</br>';
  echo '总列数:' . $stmt->columnCount() . '</br>';
} catch (PDOException $e) {
  echo $e->getMessage();
}

更改数据

代码语言:javascript
复制
<?php
// 链接数据库
require_once('conn.php');
// 获取要修改的id
$id = $_GET['id'];
// GET接收要修改的数据
$navname = $_GET['name'];
$navlink = $_GET['link'];
try {
  // 插入数据
  $sql = "update nav set navname='$navname', navlink='$navlink' where id=$id ";
  $conn->exec($sql);
  echo '修改成功';
} catch (PDOException $e) {
  echo $e->getMessage();
}

增加数据

代码语言:javascript
复制
<?php
// 链接数据库
require_once('conn.php');
// GET获取插入的数据
$navname = $_GET['name'];
$navlink = $_GET['link'];
try {
  // 插入数据
  $sql = "insert into nav(navname, navlink) values ('$navname','$navlink')";
  $conn->exec($sql);
  echo '插入成功';
} catch (PDOException $e) {
  echo $e->getMessage();
}

删除数据

代码语言:javascript
复制
<?php
// 链接数据库
require_once('conn.php');
// GET获取要删除的id
$id = $_GET['id'];
try {
  // 插入数据
  $sql = "delete from nav where id=$id";
  $conn->exec($sql);
  echo '删除成功';
} catch (PDOException $e) {
  echo $e->getMessage();
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023 年 04 月,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 连接MySQL
  • 查询数据
    • fetch()方法
      • fetchAll()方法
        • setFetchMode()方法
          • fetchColumn()
            • rowCount()和columCount()
            • 更改数据
            • 增加数据
            • 删除数据
            相关产品与服务
            云数据库 MySQL
            腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档