批改状态:合格
老师批语:
MySQLi面向对象中的查询操作
<?php
/**
* 预处理查询操作
*/
//连接数据库
require 'demo1.php';
//准备SQL语句
$sql = "SELECT `id`,`name`,`salary` FROM `staff` WHERE `salary` > ?;";
//创建预处理对象
$stmt -> $mysqli->stmt_init();
//
if($stmt->prepare($sql)){
//绑定参数
$stmt->bind_param('i',$salary);
//设置参数
$salary = 6000;
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{
exit("<p>当前表中没有数据</p>");
}
$stmt->free_result();
}else{
//返回执行阶段的出错信息
exit($stmt->errno.":".$stmt->error);
}
}else{
//返回sql语句检测阶段的出错信息
exit($stmt->errno.":".$stmt->error);
}
//注销stmt对象
$stmt->close();
//关闭连接
$mysqli->close();点击 "运行实例" 按钮查看在线实例
---------------------------------------
PDO真正的以底层实现的统一接口数库操作接口,不管后端使用的是何种数据库, 如果代码封装好了以后,应用层调用基本上差不多的, 当后端数据库更换了以后,应用层代码基本不用修改. PDO可以防止SQL注入,确保数据库更加安全
点击 "运行实例" 按钮查看在线实例
3连接数据库
<?php
/**
* 新增记录
*/
//连接数据库
$pdo = NEW PDO('mysql:host=127.0.0.1;dbname=php','root','root');
//准备SQL语句,占位符不用? 用'命名占位符'
$sql = "INSERT `user` SET `name` =:name , `email` = :email , `password` = sha1(:password)";
//创建预处理对象
$stmt = $pdo->prepare($sql);
//绑定参数
$data = ['name' => '张三', 'email' => 'zhangsam@qq.com' ,'password' => '123456'];
$stmt -> bindParam('name',$data['name'],PDO::PARAM_STR);
$stmt -> bindParam('email',$data['email'],PDO::PARAM_STR);
$stmt -> bindParam('password',$data['password'],PDO::PARAM_STR);
if($stmt->execute()){
//rowCount():返回受影响的记录数量
echo '<h3>成功添加了'.$stmt->rowCount().'条记录</h3>';
}else{
echo '<h3>添加失败</h3>';
print_r($stmt->errorInfo());//返回打印出错误信息
exit();
}
//关闭连接
$pdo=null;点击 "运行实例" 按钮查看在线实例
4.新增数据
<?php
/**
* 新增记录
*/
//1连接数据库
$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)";
//3创建预处理对象
$stmt = $pdo->prepare($sql);
//4设置参数
$data = ['name' => '王五', 'email' => 'wangwu@qq.com' ,'password' => '12345678'];
//5执行参数
$stmt->execute($data);
*/
//另一种写法 直接执行添加
$stmt = $pdo->prepare("INSERT `user` SET `name` =:name , `email` = :email , `password` = sha1(:password)");
$stmt->execute(['name' => '王五', 'email' => 'wangwu@qq.com' ,'password' => '12345678']);
echo '<h3>成功添加了'.$stmt->rowCount().'条记录</h3>';
// echo '<h3>添加失败</h3>';
// print_r($stmt->errorInfo());//返回打印出错误信息
// exit();
//关闭连接
$pdo=null;点击 "运行实例" 按钮查看在线实例
5.更新数据
<?php
/**
* 更新记录
*/
//连接数据库
$pdo = NEW PDO('mysql:host=127.0.0.1;dbname=php','root','root');
//准备SQL语句,占位符不用? 用'命名占位符'
$sql = "UPDATE `user` SET `email` =:email WHERE `id`=:id";
//创建预处理对象
$stmt = $pdo->prepare($sql);
//执行查询
if($stmt->execute(['email' => 'lisi@163.com','id' => 4])){
//rowCount():返回受影响的记录数量
echo '<h3>成功更新了'.$stmt->rowCount().'条记录</h3>';
}else{
echo '<h3>更新失败</h3>';
print_r($stmt->errorInfo());//返回打印出错误信息
exit();
}
//关闭连接
$pdo=null;点击 "运行实例" 按钮查看在线实例
6.删除数据
<?php
/**
* 删除记录
*/
//连接数据库
$pdo = NEW PDO('mysql:host=127.0.0.1;dbname=php','root','root');
//准备SQL语句,占位符不用? 用'命名占位符'
$sql = "DELETE FROM `user` WHERE `id`=:id";
//创建预处理对象
$stmt = $pdo->prepare($sql);
//执行查询
if($stmt->execute(['id' => 3])){
//rowCount():返回受影响的记录数量
echo '<h3>成功删除了'.$stmt->rowCount().'条记录</h3>';
}else{
echo '<h3>删除失败</h3>';
print_r($stmt->errorInfo());//返回打印出错误信息
exit();
}
//关闭连接
$pdo=null;点击 "运行实例" 按钮查看在线实例
7.删除数据
<?php
/**
* 查询记录
*/
//连接数据库
$pdo = NEW PDO('mysql:host=127.0.0.1;dbname=php','root','root');
//准备SQL语句,占位符不用? 用'命名占位符'
$sql = "SELECT `name`,`email` FROM `user` WHERE `id` > :id";
//创建预处理对象
$stmt = $pdo->prepare($sql);
var_dump($stmt);
//执行查询
$stmt->execute(['id' => 1]);
//一次性取出---问题:如果一次性取出太多,内存会爆,不建议使用,除非是少量数据
//$rows = $stmt->fecthAll();
//foreach($rows as $value ){
// echo 'name:',$rows['name'],',email:',$rows['email'],'<br>';
//}
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
echo var_export($row),'<br>';
}
//关闭连接
$pdo=null;点击 "运行实例" 按钮查看在线实例
8 获取结果集记录数量的正确方式是什么?
用COUNT(*)获取结果集,用$PDO->fetchColumn()取出结果集记录数量
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号