博主信息
博文 34
粉丝 0
评论 1
访问量 29130
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
MySQLi与PDO操作数据库—2018年8月30日23时45分
感恩的心的博客
原创
725人浏览过

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方式的增删改查,对我们后续工作帮助很大。

本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学