Mysqli与pdo操作数据库
时间:2018年8月30号 天气:多云
1.编程:MySQLi面向对象中的查询操作
<?php
/**
* 预处理查询
*/
require 'demo1.php';
$sql = 'SELECT * FROM `staff` WHERE `salary`>?;';
//创建预处理对象
$stmt = $conn->stmt_init();
//检测预处理·对象是否创建成功
if ($stmt->prepare($sql)){
//参数·绑定
$salary = 5000;
$stmt->bind_param('i',$salary);
//执行语句
if ($stmt->execute()){
//把执行结果放在缓冲区
$stmt->store_result();
//把结果集的列绑定到对象上区
$stmt->bind_result($id,$name,$sex,$age,$salary);
if ($stmt->num_rows>0) {
while ($stmt->fetch()) {
echo '<p>id:' . $id . '---姓名:' . $name . '---性别:' . $sex . '---年龄:' . $age . '---工资:' . $salary . '</p>';
}
}else{
exit('<p>无数据显示</p>');
}
$stmt->free_result();
}else{
//执行阶段错误
exit($stmt->errno.':'.$stmt->error);
}
}else{
//检测阶段错误
exit($stmt->errno.':'.$stmt->error);
}
//释放语句,关闭连接
$stmt->close();
$conn->close();点击 "运行实例" 按钮查看在线实例
本机运行图

2. 问答: PDO 的优势
答:
(1) PHP 数据对象 (PDO) 扩展为PHP访问数据库定义了一个轻量级的一致接口。实现 PDO 接口的每个数据库驱动可以公开具体数据库的特性作为标准扩展功能。
(2)PDO 提供了一个 数据访问 抽象层,这意味着,不管使用哪种数据库,都可以用相同的函数(方法)来查询和获取数据。 PDO 不提供 数据库 抽象层;它不会重写 SQL,也不会模拟缺失的特性。如果需要的话,应该使用一个成熟的抽象层。
3. 编程:PDO 连接数据库
<?php
/**
* pdo方法连接数据库(php,date,object)
*/
header('Content-type:text/html;charset=utf-8');
$dsn = 'mysql:127.0.0.1; dbname=php';
$user = 'root';
$psw = 'root';
try{
$sql = new PDO($dsn,$user,$psw);
echo '恭喜你,连接成功!!!';
}catch (PDOException $e){
echo 'connect error:'.$e->getMessage();
}点击 "运行实例" 按钮查看在线实例
本机运行图片:

4. 编程:PDO新增数据
<?php
/**
* pdo的增删查改
*/
header('Content-type:text/html;charset=utf-8');
$pdo = new PDO('mysql:host=127.0.0.1;dbname=php','root','root');
//$pdo = new PDO('mysql:127.0.0.1; dbname=php','root','root');
$sql = 'INSERT INTO `user` SET `name`=:name, `email`= :email, `password`= sha1(:password);';
$stmt= $pdo ->prepare($sql);
$date =['name'=>'科比','email'=>'kobe@qq.com','password'=>'123'];
$stmt->bindParam('name',$date['name'],PDO::PARAM_STR);
$stmt->bindParam('email',$date['email'],PDO::PARAM_STR);
$stmt->bindParam('password',$date['password'],PDO::PARAM_STR);
if ($stmt->execute()){
if ($stmt->rowCount()>0){
echo '成功的添加了'.$stmt->rowCount().'条数据';
}
}else{
echo '添加失败:';
print_r($stmt->errorInfo());
exit();
}
$stmt=null;
$pdo=null;点击 "运行实例" 按钮查看在线实例
本机运行图片:

5.编程: PDO更新数据
<?php
/**
* update
*/
header('Content-type:text/html; charset=utf-8');
$pdo = new PDO('mysql:host=127.0.0.1;dbname=php','root','root');
$sql = 'UPDATE `user`SET `name`=:name WHERE `id`=:id';
$stmt = $pdo->prepare($sql);
//$name='老流氓';
//$id =3;
$stmt->execute(['name'=>'老流氓','id'=>3]);
echo '成功的更新了一条记录!!!';点击 "运行实例" 按钮查看在线实例
本机运行图片:

6. 编程: PDO 删除数据
<?php
/**
* pdo,delete
*/
header('Content-type:text/html;charset=utf-8');
$pdo = new PDO('mysql:host=127.0.0.1;dbname=php','root','root');
$sql ='DELETE FROM `user` where `id`=:id;';
$stmt = $pdo->prepare($sql);
$stmt->execute(['id'=>3]);
echo '成功的删除了一条记录';点击 "运行实例" 按钮查看在线实例
本机运行图片

7. 编程:PDO查询数据
<?php
/**
* pdo的预处理查询
*/
header('Content-type:text/html;charset=utf-8');
$pdo = new PDO('mysql:host=127.0.0.1;dbname=php','root','root');
$sql = 'SELECT * FROM `staff` WHERE `salary`>:salary;';
$stmt = $pdo->prepare($sql);
$stmt->execute(['salary'=>5000]);
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
//echo'<pre>'.var_export($row,true);
echo var_export($row).'<hr>';
}点击 "运行实例" 按钮查看在线实例
8. 问答: 获取结果集记录数量的正确方式是什么?
对于大多数数据库,PDOStatement::rowCount() 不能返回受一条 SELECT 语句影响的行数。替代的方法是,使用 PDO::query() 来发出一条和原打算中的SELECT语句有相同条件表达式的 SELECT COUNT(*) 语句,然后用 PDOStatement::fetchColumn() 来取得返回的行数。这样应用程序才能正确执行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号