博客列表 >MySQLi与PDO操作数据库—2018年8月30日23时45分

MySQLi与PDO操作数据库—2018年8月30日23时45分

感恩的心的博客
感恩的心的博客原创
2018年09月16日 20:09:43578浏览

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 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议