2. 问答: PDO 的优势
PDO是 PHP 数据 对象,是PHP操作所有数据库的抽象层,提供了一个统一的访问接口
PDO简单,不管使用哪种数据库,都可以用相同的函数(方法)来查询和获取数据。
8.问答:获取结果集记录数量的正确方式是什么?
如果需要获取汇总数据需要使用以下方式fetchColumn,SQL使用COUNT(*)
<?php
header("Content-Type: text/html; charset=utf-8");
//连接数据库
require 'db.php';
//预处理查询
$sql="SELECT `id`,`name`,`salary` FROM `user` WHERE `salary`>?;";
//创建预处理对象
$stmt=$mysqli->stmt_init();
if ($stmt->prepare($sql)){
//绑定参数
$stmt->bind_param('i',$salary);
//设置参数
$salary=5000;
}
if ($stmt->execute()) {
//获取结果集并放到缓存区
$stmt->store_result();
//将结果集中的列绑定到变量上
$stmt->bind_result($id, $name, $salary);
if ($stmt->num_rows > 0) {
//遍历过结果
//fetch()
while ($stmt->fetch()) {
echo '<p>当前的id是:' . $id . ' 名称是: ' . $name . '工资是: ' . $salary . '</p>';
}
} else {
echo '当前表没有数据';
}
}
else {
//返回SQL语句的出错信息
die($stmt->errno.'---'.$stmt->error);
}
//关闭预处理对象
$stmt->close();
//关闭连接
$mysqli->close();
?>点击 "运行实例" 按钮查看在线实例
<?php
/**
* PDO是PHP数据对象,是PHP操作所有数据库的抽象层,提供了一个统一的访问接口
*
*/
//$dsn:数据源,设置数据库类型,数据库服务器和默认数据库
$dsn='mysql:host=127.0.0.1;dbname=php';
$user='root';
$password='root';
//$dsn="sqlsrv:Server=127.0.0.1,1433;Database=PHP";
//$user='sa';
//$password='';
try{
$pdo=new PDO($dsn,$user,$password);
//echo '<h2>连接成功</h2>';
}
catch (PDOException $e)
{
die('Connect ERROR!:'.$e->getMessage());
}
//关闭连接
$pdo=null;
//unset($pdo);点击 "运行实例" 按钮查看在线实例
<?php
/**
* 新增数据
*/
//1-连接数据库
//$pdo=new PDO('sqlsrv:Server=127.0.0.1,1433;Database=PHP','sa','');//SQL连接方式
$pdo=new PDO('mysql:host=127.0.0.1;dbname=php','root','root');
//2-准备SQL语句,占位符不们不用?,用"命名占位符"
$sql="INSERT `user` SET `name`= :name , `email`=:email , `password` = sha1(:password)";
//echo $stmt->queryString;die();//输出检测SQL语句
//3-创建预处理对象
$stmt=$pdo->prepare($sql);
//4-设置参数
$data=['name'=>'何生','email'=>'he@bonsaii.com','password'=>'123456'];//定义数据组
//5-执行添加
$stmt->execute($data);
echo '<h2>成功的添加了'.$stmt->rowCount().'条记录!</h2>';
//关闭pdo
unset($pdo);
//关闭连接
$pdo=null;点击 "运行实例" 按钮查看在线实例
<?php
/**
*更新数据
*/
//1-连接数据库
$pdo=new PDO('mysql:host=127.0.0.1;dbname=php','root','root');
//2-准备SQL语句,占位符不们不用?,用"命名占位符"
$sql="UPDATE `user` SET `name`= :name , `email`=:email WHERE `id`=:id";
//3-创建预处理对象
$stmt=$pdo->prepare($sql);
//4-绑定参数
//$data=['name'=>'he','email'=>'hh@php.com','id'=>140];
if ($stmt->execute(['name'=>'he','email'=>'hh@php.com','id'=>140]))
{
//返回受影响的行
echo '<h2>更新成功了:'.$stmt->rowCount().'行!</h2>';
}
else{
echo '<h2>更新失败</h2>';
print_r($stmt->errorInfo());
die();
}
//关闭pdo
unset($pdo);
//关闭连接
$pdo=null;点击 "运行实例" 按钮查看在线实例
<?php
/**
* 删除数据
*/
//1-连接数据库
$pdo=new PDO('mysql:host=127.0.0.1;dbname=php','root','root');
//2-准备SQL语句,占位符不们不用?,用"命名占位符"
$sql="DELETE FROM `user` WHERE `id`=:id";
//3-创建预处理对象
$stmt=$pdo->prepare($sql);
if ($stmt->execute(['id'=>32]))
{
//返回受影响的行
echo '<h2>删除成功了:'.$stmt->rowCount().'行!</h2>';
}
else{
echo '<h2>删除失败</h2>';
print_r($stmt->errorInfo());
die();
}
//关闭pdo
unset($pdo);
//关闭连接
$pdo=null;点击 "运行实例" 按钮查看在线实例
<?php
/**
* 查询数据
*/
//1-连接数据库
$pdo=new PDO('mysql:host=127.0.0.1;dbname=php','root','root');
//2-准备SQL语句,占位符不们不用?,用"命名占位符"
$sql="SELECT `user`,`name`,`email` FROM `user` WHERE `id`<=:id";
//3-创建预处理对象
$stmt=$pdo->prepare($sql);
if ($stmt->execute(['id'=>100]))
{
//返回数据
//
// 一次性取出
// $rows=$stmt->fetchAll();
//// var_dump($rows);
// foreach ($rows as $row)
// {
// echo 'user:'.$row['user'].'name:'.$row['name'].'email'.$row['email'].'<br>';
// }
while ( $row=$stmt->fetch(PDO::FETCH_ASSOC)){
echo var_dump($row).'<br>';
}
// $row=$stmt->fetch(PDO::FETCH_ASSOC);//PDO::FETCH_ASSOC只取关联部分,默认输是取关联和索引
// var_dump($row);
echo '<h2>查询数据:'.$stmt->rowCount().'行!</h2>';
}
else{
echo '<h2>查询失败</h2>';
print_r($stmt->errorInfo());
die();
}
//关闭pdo
unset($pdo);
//关闭连接
$pdo=null;点击 "运行实例" 按钮查看在线实例
<?php
/**
* 将结果集绑定到变量上
*/
//1-连接数据库
$pdo=new PDO('mysql:host=127.0.0.1;dbname=php','root','root');
//2-准备SQL语句,占位符不们不用?,用"命名占位符"
$sql="SELECT `user`,`name`,`email` FROM `user` WHERE `id`<=:id";
$stmt=$pdo->prepare($sql);
$stmt->execute(['id'=>100]);
//将结果集绑定到变量:列与变量绑定
$stmt->bindColumn('user',$user);
$stmt->bindColumn('name',$name);
$stmt->bindColumn('email',$email);
//用列变量来遍历结果集:建议使用类常量,PDO::FETCH_BOUND
while ($stmt->fetch(PDO::FETCH_BOUND)){
echo '<h4> 用户 :'.$user.' 名称: '.$name.' 邮箱: '.$email. '</h4>';
}
//关闭pdo
unset($pdo);
//关闭连接
$pdo=null;点击 "运行实例" 按钮查看在线实例
<?php
/**
* 查询数据的行数
*/
//1-连接数据库
$pdo=new PDO('mysql:host=127.0.0.1;dbname=php','root','root');
//2-准备SQL语句,占位符不们不用?,用"命名占位符"
//$sql="SELECT `user`,`name`,`email` FROM `user` WHERE `id`<=:id";
////3-创建预处理对象
//$stmt=$pdo->prepare($sql);
//
// if ($stmt->execute(['id'=>100])) {
//// echo $stmt->fetchColumn(1), '<br>';//获取第一行第一列的数据,默认不传值是0;如果指定2代表3列数据email,
// }
//如果需要获取汇总数据需要使用以下方式
$stmt=$pdo->prepare('SELECT COUNT(*) FROM `user` WHERE `id`<=:id');
$stmt->execute(['id'=>100]);
echo '返回人数:'.$stmt->fetchColumn().'<hr>';
// //返回数据
// while ( $row=$stmt->fetch(PDO::FETCH_ASSOC))
// {
// echo var_dump($row).'<br>';
// }
// }
//关闭pdo
unset($pdo);
//关闭连接
$pdo=null;点击 "运行实例" 按钮查看在线实例
$pdo = new PDO('mysql:host=localhost;dbname=php','root','root');
$stmt = $pdo->prepare($sql);
PDOStatement 类
$stmt->bindColumn : 绑定一列到一个 PHP 变量
$stmt->bindParam — 绑定一个参数到指定的变量名
$stmt->bindValue — 把一个值绑定到一个参数
$stmt->closeCursor — 关闭游标,使语句能再次被执行。
$stmt->columnCount — 返回结果集中的列数
$stmt->debugDumpParams — 打印一条 SQL 预处理命令
$stmt->errorCode — 获取跟上一次语句句柄操作相关的 SQLSTATE
$stmt->errorInfo — 获取跟上一次语句句柄操作相关的扩展错误信息
$stmt->execute — 执行一条预处理语句
$stmt->fetch — 从结果集中获取下一行
$stmt->fetchAll — 返回一个包含结果集中所有行的数组
$stmt->fetchColumn — 从结果集中的下一行返回单独的一列。
$stmt->fetchObject — 获取下一行并作为一个对象返回。
$stmt->getAttribute — 检索一个语句属性
$stmt->getColumnMeta — 返回结果集中一列的元数据
$stmt->nextRowset — 在一个多行集语句句柄中推进到下一个行集
$stmt->rowCount — 返回受上一个 SQL 语句影响的行数
$stmt->setAttribute — 设置一个语句属性
$stmt->setFetchMode — 为语句设置默认的获取
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号