1、编程:MySQLi面向对象中的查询操作
<?php
//感恩
//认真的人该变了自己,坚持的人改变了命运!
//日行一善,改变命运!
require 'demo1.php';
$sql = "SELECT `staff_id`,`name`,`salary` FROM `staff` WHERE `salary`>?;";
$stmt = $mysqli->stmt_init();
if (!$stmt->prepare($sql)) {
//打印sql语句检测阶段出错
exit($stmt->errno . ':' . $stmt->error);
}
//i代表整型类型
$stmt->bind_param('i', $salary);
$salary = 5000;
if (!$stmt->execute()) {
//执行阶段出错
exit($stmt->errno . ':' . $stmt->error);
}
//存储结果集
$stmt->store_result();
//将结果集绑定到变量上
$stmt->bind_result($id, $name, $salary);
if ($stmt->num_rows > 0) {
while ($stmt->fetch()) {
echo 'id:' . $id . ',name:' . $name . ',salary:' . $salary . '<br>';
}
} else {
exit('当前表中无数据<br>');
}
//释放结果集
$stmt->free_result();
//关闭预处理
$stmt->close();
//关闭SQL连接
$mysqli->close();点击 "运行实例" 按钮查看在线实例
2. 问答: PDO 的优势
PDO有非常多的操作却是MySQL扩展库所不具备的:
(1)PDO真正的以底层实现的统一接口数库操作接口,不管后端使用的是何种数据库,如果代码封装好了以后,应用层调用基本上差不多的,当后端数据库更换了以后,应用层代码基本不用修改.
(2)PDO支持更高级的DB特性操作,如:存储过程的调度等,mysql原生库是不支持的.
(3)PDO是PHP官方的PECL库,兼容性稳定性必然要高于MySQL Extension,可以直接使用 pecl upgrade pdo 命令升级.
(4)PDO可以防止SQL注入,确保数据库更加安全。
3. 编程:PDO 连接数据库
<?php
//感恩
//认真的人该变了自己,坚持的人改变了命运!
//日行一善,改变命运!
//PDO PHP数据对象,提供了一个统一的访问接口
$dsn='mysql:host=127.0.0.1;dbname=php';
$user='root';
$password='root123';
try{
$pdo=new PDO($dsn,$user,$password);
echo '连接成功!';
}catch(PDOException $e){
die('Connect Error:'.$e.getMessage());
}
//关闭连接
$pdo=null;点击 "运行实例" 按钮查看在线实例
4. 编程:PDO新增数据
<?php
//感恩
//认真的人该变了自己,坚持的人改变了命运!
//日行一善,改变命运!
$pdo=new PDO('mysql:host=127.0.0.1;dbname=php','root','root123');
$sql="INSERT `user` SET `user_name`=:name,`email`=:email,`password`=sha1(:password);";
//预处理
$stmt=$pdo->prepare($sql);
//绑定参数
$data=['name'=>'菩萨','email'=>'pusa@pusa.cn','password'=>'pusa'];
$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()){
echo '成功添加'.$stmt->rowCount().'条记录';
}else{
echo '<h3>添加失败:</h3>';
print_r($stmt->errorInfo());
}
//批量添加
$stmt->execute(['name' => 'pusa1', 'email' => 'pusa1@php.cn', 'password' => 'pusa']);
$stmt->execute(['name' => 'pusa2', 'email' => 'pusa2@php.cn', 'password' => 'pusa']);
$stmt->execute(['name' => 'pusa3', 'email' => 'pusa3@php.cn', 'password' => 'pusa']);
$stmt->execute(['name' => 'pusa4', 'email' => 'pusa4@php.cn', 'password' => 'pusa']);
$stmt=null;
$pdo=null;点击 "运行实例" 按钮查看在线实例
5.编程: PDO更新数据
<?php
//感恩
//认真的人该变了自己,坚持的人改变了命运!
//日行一善,改变命运!
$pdo = new PDO('mysql:host=127.0.0.1;dbname=php', 'root', 'root123');
$sql = "UPDATE `user` SET `user_name`=:name WHERE `user_id`=:id";
//预处理
$stmt = $pdo->prepare($sql);
$stmt->execute(['name'=>'pusa','id'=>3]);
echo '<h3>成功更新了'.$stmt->rowCount().'条数据</h3>';
$stmt = null;
$pdo = null;点击 "运行实例" 按钮查看在线实例
6. 编程: PDO 删除数据
<?php
//感恩
//认真的人该变了自己,坚持的人改变了命运!
//日行一善,改变命运!
$pdo = new PDO('mysql:host=127.0.0.1;dbname=php', 'root', 'root123');
$sql = "DELETE FROM `user` WHERE `user_id`=:id";
//预处理
$stmt = $pdo->prepare($sql);
//$stmt->execute(['name' => 'pusa4']);
if ($stmt->execute(['id' => 10])) {
echo '<h3>成功删除了' . $stmt->rowCount() . '条记录</h3>';
} else {
echo '<h3>无删除</h3>';
print_r($stmt->errorInfo());
exit();
}
$stmt = null;
$pdo = null;点击 "运行实例" 按钮查看在线实例
7. 编程:PDO查询数据
查询方式1
<?php
//感恩
//认真的人该变了自己,坚持的人改变了命运!
//日行一善,改变命运!
$pdo = new PDO('mysql:host=127.0.0.1;dbname=php', 'root', 'root123');
$sql = "SELECT `user_name`,`email` FROM `user` WHERE `user_id`<:id";
//预处理
$stmt = $pdo->prepare($sql);
//$stmt->execute(['name' => 'pusa4']);
if ($stmt->execute(['id' => 8])) {
echo '<h3>成功选择了' . $stmt->rowCount() . '条记录</h3>';
} else {
echo '<h3>无选择</h3>';
print_r($stmt->errorInfo());
exit();
}
$rows=$stmt->fetchAll();
foreach($rows as $row){
echo 'name:',$row['user_name'],',Email:',$row['email'],'<br>';
}
$stmt = null;
$pdo = null;点击 "运行实例" 按钮查看在线实例
查询方式2
<?php
//感恩
//认真的人该变了自己,坚持的人改变了命运!
//日行一善,改变命运!
echo '<pre>';
$pdo = new PDO('mysql:host=127.0.0.1;dbname=php', 'root', 'root123');
$sql = "SELECT `user_name`,`email` FROM `user` WHERE `user_id`<:id";
//预处理
$stmt = $pdo->prepare($sql);
//$stmt->execute(['name' => 'pusa4']);
if ($stmt->execute(['id' => 8])) {
echo '<h3>成功选择了' . $stmt->rowCount() . '条记录</h3>';
} else {
echo '<h3>无选择</h3>';
print_r($stmt->errorInfo());
exit();
}
//第1行第1列
echo $stmt->fetchColumn(0), '<br>';
//第2行第1列
echo $stmt->fetchColumn(0), '<br>';
//第1行第2列
echo $stmt->fetchColumn(1), '<br>';
$stmt = $pdo->prepare('SELECT `staff_id`,`name`,`salary` FROM `staff` WHERE `salary`<:salary');;
$stmt->execute(['salary'=>6000]);
//不推荐,有可能返回结果不正确
echo '工资数小于6000的是'.$stmt->rowCount().'<br>';
$stmt->bindColumn('name',$name);
$stmt->bindColumn('salary', $salary);
while($stmt->fetch(PDO::FETCH_BOUND)){
echo 'name:',$name,',salary:',$salary,'<br>';
}
//推荐这种方法
$stmt = $pdo->prepare('SELECT COUNT(*) FROM `staff` WHERE `salary`>:salary');
$stmt->execute(['salary' => 6000]);
echo '工资数大于6000的是'.$stmt->fetchColumn().'<br>';
//var_dump($stmt->fetchAll());
$stmt = null;
$pdo = null;点击 "运行实例" 按钮查看在线实例
8. 问答:获取结果集记录数量的正确方式是什么?
//推荐这种方法
$stmt = $pdo->prepare('SELECT COUNT(*) FROM `staff` WHERE `salary`>:salary');
$stmt->execute(['salary' => 6000]);
echo '工资数大于6000的是'.$stmt->fetchColumn().'<br>';
9.小结
本章学习了PDO方式的增删改查,对我们后续工作帮助很大。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号