批改状态:合格
老师批语:
mysqli面向对象的查询操作
主要通过store_result()来获取结果集,然后用bind_result()把结果集绑定在变量上,最后用fetch()来每次获取结果集中的一条数据,代码如下:
<?php
/**
*查询操作
*/
//连接数据库
require 'connect.php';
$sql = "SELECT `staff_id`,`name`,`salary` FROM `staff` WHERE `salary`>?;";
//创建预处理对象
$stmt = $mysqli->stmt_init();
if ($stmt->prepare($sql)){//预处理对象的prepare方法 检测sql语句是否正确
//绑定参数
$stmt->bind_param('i',$salary);
$salary = 5000;
if ($stmt->execute()){var_dump($stmt->num_rows);
//获取结果集并放到缓存区
$stmt->store_result();
//将结果集中的列绑定到变量上
$stmt->bind_result($id,$name,$salary);
//判断结果集是否为空,不为空才遍历
if ($stmt->num_rows > 0){
//循环遍历结果集
//fetch()每次获取一条记录,指针下移
while ($stmt->fetch()){
echo '<p>id:'.$id.',姓名:'.$name.',工资:'.$salary;
}
}else{
die('当前表没有数据');
}
}else{//执行阶段的错误
die($stmt->errno.':'.$stmt->error);
}
}else{
//返回sql出错信息
die($stmt->errno.':'.$stmt->error);
}
$stmt->close();
$mysqli->close();点击 "运行实例" 按钮查看在线实例
pdo的优势
pdo是php数据对象,为其他数据库提供了一个统一的接口,也就是说可以操作所有的数据库,使用很方便。
<?php
/**
* pdo php数据对象, 是php操作所有数据库的抽象层,提供了一个统一的方法
*/
//new PDO(数据源,用户名,密码)
//数据源:设置数据库类型,以及服务器地址,默认的数据库
$dsn = 'mysql:host=127.0.0.1; dbname=php';
//用户名
$user = 'root';
//密码
$pass = 'root';
//实例化pdo,创建pdo对象看,并实现数据库连接
//语法结构try{}catch{}
try{
$pdo = new PDO($dsn, $user, $pass);
}catch(PDOException $e){ //pdoexception 数据类型 pdo异常 $e对象
die('connect error:'.$e->getMessage());//getMessage()获取pdo错误信息
}
//关闭连接
//$pdo = null;
//unset($pdo);点击 "运行实例" 按钮查看在线实例
<?php
/**
* 新增记录
*/
//1.连接数据库 创建pdo对象
$pdo = new PDO('mysql:host=127.0.0.1;dbname=php','root','root');
//2.准备sql语句,占位符不用? ,用:字段名
$sql = "INSERT `user` SET `user_name`=:name, `email`=:email, `password`=sha1(:password);";
// 3.创建预处理对象
$stmt = $pdo->prepare($sql);
//4.参数绑定
$data = ['name'=>'jack','email'=>'jack@php.cn','password'=>'root'];
$stmt->bindParam(':name',$data['name'],PDO::PARAM_STR);//PDO::PARAM_STR指定参数类型为字符串
$stmt->bindParam(':email',$data['email'],PDO::PARAM_STR);
$stmt->bindParam(':password',$data['password'],PDO::PARAM_STR);
//5.执行语句
if ($stmt->execute()){//判断执行是否成功
//rowcount():返回受影响的记录数量
echo "<h3>成功添加了:{$stmt->rowCount()}条记录</h3>";
}else{
echo '<h3>添加失败</h3>';
print_r($stmt->errorInfo());//打印执行失败信息
die();
}
$stmt = null;
//关闭连接
$pdo = null;点击 "运行实例" 按钮查看在线实例
<?php
/**
* update数据
*/
//连接数据库
$pdo = new PDO('mysql:host=127.0.0.1;dbname=php','root','root');
//准备sql语句
$sql = "UPDATE `user` SET `email`=:email WHERE `user_id`=:id;";
//预处理对象
$stmt = $pdo->prepare($sql);
//传参执行
if($stmt->execute(['email'=>'333@qq.com','id'=>'134'])){
//是否修改成功
if($stmt->rowCount() > 0 ){//受影响记录是否>0
echo '<h3>成功修改了',$stmt->rowCount(),'条数据</h3>';
}else{
echo '无修改';
print_r($stmt->errorInfo());//返回修改错误信息
}
}else{
print_r($stmt->errorInfo());//返回执行错误信息
die();
}
//注销对象
unset($stmt,$pdo);点击 "运行实例" 按钮查看在线实例
<?php
/**
* 删除数据
*/
//连接数据库
$pdo = new PDO('mysql:host=127.0.0.1;dbname=php','root','root');
//准备sql语句
$sql = "DELETE FROM `user` WHERE `user_id`>:id; ";
//创建预处理对象
$stmt = $pdo->prepare($sql);
//传参 执行语句
if($stmt->execute(['id'=>3])){//是否执行成功
//是否有数据删除
if ($stmt->rowCount()){
echo '<h3>成功删除了',$stmt->rowCount(),'条数据</h3>';
}else{
echo "无数据删除";
print_r($stmt->errorInfo());
}
}else{
print_r($stmt->errorInfo());
die();
}
unset($stmt,$pdo);点击 "运行实例" 按钮查看在线实例
<?php
/**
* 查询数据
*
*/
//连接数据库
$pdo = new PDO('mysql:host=127.0.0.1;dbname=php','root','root');
$pdo->query('set names utf8;');//设置编码
//准备sql语句
$sql = "SELECT `staff_id`, `name`, `salary` FROM `staff` WHERE `salary`>:salary; ";
//$sql = "SELECT `user_id`, `user_name` FROM `user` WHERE `user_id`>:id; ";
//创建预处理对象
$stmt = $pdo->prepare($sql);
//传参执行
if($stmt->execute(['salary'=>7000])){
if ($stmt->rowCount()>0){//受影响行数
// $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);//一次获取结果集
//// var_export($rows);
// foreach ($rows as $v){//遍历结果集
// echo 'id:',$v['staff_id'],' ,name:',$v['name'],' ,salary:',$v['salary'],'<br>';
// }
//pdo::fetch()每次获取一条记录,返回一个数组
while ($rows = $stmt->fetch(PDO::FETCH_ASSOC)){
echo 'id:',$rows['staff_id'],' ,name:',$rows['name'],' ,salary:',$rows['salary'],'<br>';
}
}else{
echo '<h3>查询失败</h3>';
print_r($stmt->errorInfo());
}
}else{
print_r($stmt->errorInfo());
die();
}
//注销对象
unset($stmt,$pdo);点击 "运行实例" 按钮查看在线实例
$stmt->rowCount()可以适用于增、删、改,这3个可以正确获取结果数量,查询则要使用select count()
和$stmt->fetchColumn()结合使用返回正确结果集个数。
总结:
pdo的操作基本流程都差不多,有以下步骤:
连接数据库,创建pdo连接对象
准备sql语句
创建sql预处理对象prepare()
参数绑定 bindParam()
执行sql语句execute()
获取结果集fetchAll()一次获取,fetch()一次获取一条,指针自动下移
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号