1,以下代码主要实现了mysqli对象对数据库的查询数据的操作:
<?php
//预处理查询数据操作
//链接数据库
require "demo1.php";
//准备SQL语句
$sql = "SELECT `id`,`name`,`chinese` FROM `student1` WHERE `id` > ? ;";
//创建预处理对象
$stmt = $mysqli->prepare($sql);
//绑定参数
$stmt->bind_param('i',$id);
$id= 1;
if($stmt->execute()){
//获取结果集并放到缓存区
$stmt->store_result();
//将结果集中的列绑定到变量上
$stmt->bind_result($id,$name,$chinese);
//结果集是否为空,只有不为空的时候才遍历
if($stmt->num_rows > 0){
//循环遍历结果集
//fetch()每次获取一条记录,并将指针自动下移
while($stmt->fetch()){
echo 'id:'.$id.'-----姓名:'.$name.'-----语文成绩:'.$chinese.'<br>';
}
} else {
exit('当前数据表中没有数据');
}
//释放结果集
$stmt->free_result();
}else{
//返回执行阶段的出错信息
exit($stmt->errno. ': ' . $stmt->error);
}
//注销stmt对象
$stmt->close();
//关闭连接
$mysqli->close();
?>点击 "运行实例" 按钮查看在线实例
说明:以上代码主要运用mysqli对象连接数据库,通过预处理对象$stmt对数据库进行预处理查询数据操作,主要的知识点是参数的绑定,以及对结果集循环的遍历。
2,以下代码主要介绍了PDO对数据库的连接操作:
<?php
//链接数据库
$dsn = 'mysqli:host=localhost;dbname=db100;charset=utf8';
$user = 'root';
$pass = 123456;
try{
$pdo = new PDO($dsn,$user,$pass);
//echo '连接成功';
}catch(PDOException $e){
die('Connect ERROR! :'.$e->getMessage());
}
//关闭连接
//$pdo = null;
//unset($pdo)
?>点击 "运行实例" 按钮查看在线实例
以上代码主要实现了pdo对象连接数据库的操作,其中$dsn 是连接数据库的数据源,是确定以哪种方式连接数据库的,此处我用的为mysqli数据源连接的数据库。
3,以下代码是PDO对象通过预处理新增数据的操作:
<?php
//新增记录
//链接数据库
require 'demo1.php';
//准备SQL语句,占位符换为命名占位符
$sql = "INSERT INTO `student1` SET `id`=:id,`name`=:name,`chinese`=:chinese";
//创建预处理对象
$stmt = $pdo->prepare($sql);
$data = ['id'=>11,'name'=>'黄蓉','chinese'=>90];
//绑定参数
$stmt->bindParam(':id',$data['id'],PDO::PARAM_INT);
$stmt->bindParam(':name',$data['name'],PDO::PARAM_STR);
$stmt->bindParam(':chinese',$data['chinese'],PDO::PARAM_STR);
if($stmt->execute()){
//rowCount():返回受影响的记录数量
echo '成功添加了' . $stmt->rowCount().'条记录';
}else{
echo '添加失败!';
print_r($stmt->errorInfo());
exit();
}
//关闭连接
$stmt = null;
$pdo = null;
?>点击 "运行实例" 按钮查看在线实例
说明:使用pdo对象中的预处理对象操作数据库,此处的占位符使用的为命名占位符,通过$stmt->execute()方法执行新增数据,并通过$stmt->rowCount()来返回受影响的记录数;
4,以下代码代码是PDO对象通过预处理更新数据的操作:
<?php
//更新记录
//链接数据库
require 'demo1.php';
//准备SQL语句,占位符换为命名占位符
$sql = "UPDATE `student1` SET `name`=:name WHERE `id`=:id; ";
//创建预处理对象
$stmt = $pdo->prepare($sql);
$data = ['id'=>11,'name'=>'郭靖'];
//绑定参数
$stmt->bindParam('id',$data['id'],PDO::PARAM_INT);
$stmt->bindParam('name',$data['name'],PDO::PARAM_STR);
if($stmt->execute()){
//rowCount():返回受影响的记录数量
echo '成功修改了' . $stmt->rowCount().'条记录';
}else{
echo '修改失败!';
print_r($stmt->errorInfo());
exit();
}
//关闭连接
$stmt = null;
$pdo = null;
?>点击 "运行实例" 按钮查看在线实例
说明:更新操作同样使用pdo对象中的预处理对象操作数据库,此处的占位符使用的为命名占位符,通过改变不同的SQL语句实现更新操作并结合$stmt->execute()方法执行更新数据,并通过$stmt->rowCount()来返回受影响的记录数;
5,以下代码代码是PDO对象通过预处理删除数据的操作:
<?php
//删除记录
//链接数据库
require 'demo1.php';
//准备SQL语句,占位符换为命名占位符
$sql = "DELETE FROM `student1` WHERE `english`=:english; ";
//创建预处理对象
$stmt = $pdo->prepare($sql);
$english = 0;
//绑定参数
$stmt->bindParam('english',$english,PDO::PARAM_STR);
if($stmt->execute()){
//rowCount():返回受影响的记录数量
echo '成功删除了' . $stmt->rowCount().'条记录';
}else{
echo '删除失败!';
print_r($stmt->errorInfo());
exit();
}
//关闭连接
$stmt = null;
$pdo = null;
?>点击 "运行实例" 按钮查看在线实例
说明:与新增,更新操作相同,删除操作同样使用pdo对象中的预处理对象操作数据库,此处的占位符使用的为命名占位符,通过改变不同的SQL语句实现删除操作并结合$stmt->execute()方法执行删除数据,并通过$stmt->rowCount()来返回受影响的记录数;
6,以下代码是PDO对象通过预处理查询数据的操作:
<?php
//查询记录
//链接数据库
require 'demo1.php';
//准备SQL语句
$sql = "SELECT `id`,`name`,`chinese` FROM `student1` WHERE `id` > :id";
//创建预处理对象
$stmt = $pdo->prepare($sql);
$id = 1;
//绑定参数
$stmt->bindParam('id',$id,PDO::PARAM_INT);
if($stmt->execute()){
//第一种方法
$rows = $stmt->fetchAll();
foreach($rows as $row ){
echo '编号:'.$row['id'],'名字:'.$row['name'],'语文成绩:'.$row['chinese'],'<br>';
}
//第二种方法
// while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
// echo var_export($row).'<br>';
// }
}else{
echo '查询失败!';
print_r($stmt->errorInfo());
exit();
}
//关闭连接
$stmt = null;
$pdo = null;
?>点击 "运行实例" 按钮查看在线实例
<?php
//查询记录
//链接数据库
require 'demo1.php';
//准备SQL语句
$sql = "SELECT `id`,`name`,`chinese` FROM `student1` WHERE `id` > :id";
//创建预处理对象
$stmt = $pdo->prepare($sql);
$id = 1;
//绑定参数
$stmt->bindParam('id',$id,PDO::PARAM_INT);
//将结果集中的列绑定到变量上
$stmt->bindColumn('name', $name);
$stmt->bindColumn('chinese', $chinese);
if($stmt->execute()){
//第三种方法
//用列变量来遍历结果集
while ($stmt->fetch(PDO::FETCH_BOUND)) {
echo '编号',$id,'姓名: ',$name, '语文成绩: ', $chinese, '<br>';
}
}else{
echo '查询失败!';
print_r($stmt->errorInfo());
exit();
}
//关闭连接
$stmt = null;
$pdo = null;
?>点击 "运行实例" 按钮查看在线实例
说明:预处理查询数据操作,与前三者首先是SQL语句不同,使用的查询数据的SQL语句,其次查询语句需要获取结果集从而打印到屏幕,第一种方法是通过$stmt->fetchAll()函数,使用foreach或while循环遍历结果集的方式,此方法不许要绑定待查询数据的参数,第二种方法先将结果集中的列绑定到变量上,再通过$stmt->fetch(PDO::FETCH_BOUND)循环输出结果集。
7,PDO为操作数据库提供了统一的接口,使对数据库的操作更加的规范统一,同时比其他的方式更高效。
总结:此次学习mysqli对数据库的增删改查操作,相对来说感觉是有点麻烦的,学习了mysqli的只是后,又学了pdo对数据哭的增删改查操作,相对mysqli来说pdo使用起来更加的方便间接,其中的预处理防止SQL注入更是让我感到了技术的无穷的奥妙,希望继续努力,继续加油!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号