博客列表 >MySQLi查询_PDO增删改查_2018年8月30日

MySQLi查询_PDO增删改查_2018年8月30日

宋超的博客
宋超的博客原创
2018年09月03日 00:11:35865浏览

一.MySQLi面向对象中的查询操作

mysqli查询实例

<?php
/**
 预处理查询数据
 */
require 'demo1.php';

//sql语句
$sql = "SELECT `id`,`name`,`age`,`salary` FROM `staff` WHERE salary> ? ;";
//创建预处理对象 方法一
//$stmt = $mysqli->prepare($sql);

//创建预处理对象 方法二
$stmt = $mysqli->stmt_init();

if($stmt->prepare($sql)){
    //绑定参数
        $stmt->bind_param('i',$salary);
    //设置参数
        $salary=900;

        //执行查询
    if($stmt->execute()){
        //将结果集放入缓存区
        $stmt->store_result();
        //把结果集中的列绑定到变量中
        $stmt->bind_result($id,$name,$age,$salary);

        //结果集不为空时遍历数据
        if($stmt->affected_rows >0){
            $count = $stmt->affected_rows;
            echo '返回数据'.$count.'条';
            //循环遍历结果集
            //fetch()每次获取一条记录,并将指针自动下移
            while ($stmt->fetch()){
                echo '<p>id:'.$id.'name:'.$name.'age:'.$age.'salary:'.$salary.'</p>';
            }
        }else{
            die('没有返回数据');
        }
        //释放结果集
        $stmt->free_result();

    }else{
        //执行错误
        die($stmt->error.':'.$stmt->error);
    }
}else{
    die($stmt->errno.':'.$stmt->error);
}

//注销对象资源
$stmt->close();
//关闭mysql连接
$mysqli->close();

运行实例 »

点击 "运行实例" 按钮查看在线实例

demo1.php

<?php
/**连接数据库 */
require ('config.php');
$mysqli = new mysqli($db['host'],$db['user'],$db['pass'],$db['name']);

if($mysqli->connect_errno){
    die('数据库连接出错'.$mysqli->connect_errno.$mysqli->connect_error);
}
//echo '<h1>连接成功</h1>';

//$mysqli=>select_db($db['name']);

$mysqli->set_charset($db['charset']);

运行实例 »

点击 "运行实例" 按钮查看在线实例

config.php

<?php
/** * 数据库配置 */
error_reporting(E_ALL);
$db=[
    'host'=>'127.0.0.1',
    'user'=>'root',
    'pass'=>'admin',
    'name'=>'php',
    'charset'=>'utf8',
];

运行实例 »

点击 "运行实例" 按钮查看在线实例

二.PDO 的优势
1.兼容各类不同类型的数据库,相同的代码可操作不同的数据库很灵活.
2.通过预处理对象来执行SQL可以有效提高安全问题.

(1).数据库连接实例

<?php
/**PDO PHP数据对象,是php操作所有数据库的抽象层,提供了一个统一的访问接口 */
//数据源:设置数据库的类型,以及数据库服务器和默认数据库
$dsn = 'mysql:host=127.0.0.1; dbname=php';
$user = 'root';
$pass = 'admin';
//实例化PDO类,创建pdo对象,并完成了数据库的连接
try{
    $pdo = new PDO($dsn, $user, $pass);
    echo '<h1>连接成功</h1>';
} catch (PDOException $e) {
    die('connect ERROR!:'. $e->getMessage());
}

//关闭连接
//$pdo = null;
//unset($pdo);

运行实例 »

点击 "运行实例" 按钮查看在线实例

(2)PDO添加数据实例

<?php
/**PDO新增操作 */

//1.连接数据库
$pdo = new PDO('mysql:host=127.0.0.1;dbname=php','root','admin');
//2.准备SQL语句,占位符不用? 用"命名点位符"
$sql = "INSERT IGNORE `user` SET `name`= :name ,`email`= :email, `password`=sha1(:password); ";

//3.创建预处理对象
$stmt = $pdo->prepare($sql);
//echo $stmt->queryString;exit; 查看当前语句

//4.设置参数
//$data=['name'=>'天地','email'=>'td@php.cn','password'=>'123'];

//4.执行增加
$stmt->execute(['name'=>'天地','email'=>'td@php.cn','password'=>'123']);
echo '<h3>成功添加了'.$stmt->rowCount().'条记录</h3>';

/*
if($stmt->execute()){
    //rowCount:返回受影响的记录数
    if($stmt->rowCount() > 0){
        echo '<h3>成功添加了'.$stmt->rowCount().'条记录</h3>';
    }else{
        echo '没有数据添加';
    }
}else{
    echo '<h2>增加失败</h2>';
    print_r($stmt->errorInfo());
    exit();
}*/
//注销对象
$stmt=null;
//关闭pdo连接
$pdo= null;

运行实例 »

点击 "运行实例" 按钮查看在线实例

(3)pdo更新

<?php
/**更新操作 */
//连接数据库
$pdo = new PDO('mysql:host=127.0.0.1;dbname=php','root','admin');

$sql = "UPDATE `user` SET `email`=:email WHERE `id`=:id;";
//创建预处理对象
$stmt = $pdo->prepare($sql);

//执行
if($stmt->execute(['email'=>'11s1@qq.com','id'=>5])){
    if($stmt->rowCount() > 0){
   echo '更新成功'.$stmt->rowCount().'条记录';
    }else{
        echo '没有数据更新';
    }
}else{
    echo '执行错误<pre>'.print_r($stmt->errorInfo(),true);
}


//关闭对象
$stmt=null;
//关闭连接
$pdo=null;

运行实例 »

点击 "运行实例" 按钮查看在线实例

(4)删除实例

<?php
/**删除操作 */
//连接数据库
$pdo = new PDO('mysql:host=127.0.0.1;dbname=php','root','admin');

$sql = "DELETE FROM `user` WHERE `id`=:id;";
//创建预处理对象
$stmt = $pdo->prepare($sql);

//执行
if($stmt->execute(['id'=>'3'])){
    if($stmt->rowCount() > 0){
   echo '删除成功'.$stmt->rowCount().'条记录';
    }else{
        echo '没有数据删除';
    }
}else{
    echo '执行错误<pre>'.print_r($stmt->errorInfo(),true);
}


//关闭对象
$stmt=null;
//关闭连接
$pdo=null;

运行实例 »

点击 "运行实例" 按钮查看在线实例

(5)PDO查询实例

<?php
/**查询操作 */
//连接数据库
$pdo = new PDO('mysql:host=127.0.0.1;dbname=php','root','admin');
//sql语句
$sql = "SELECT `name`,`email` FROM `user` WHERE `id` > :id;";
//创建预处理对象
$stmt=$pdo->prepare($sql);
//执行查询
$stmt->execute(['id'=>5]);
//一次性取出   弊端是数据量大时会导致崩溃 爆仓   除非可确定取出多少数据
//$rows = $stmt->fetchAll();
//var_dump($rows);
/*foreach($rows as $row){
    echo 'name:'.$row['name'].'--email:'.$row['email'].'<br>';
}
echo '<hr>';
while(list($a,$b) = each($rows)){
    echo 'name:'.$b['name'].'--email:'.$b['email'].'<br>';
}*/

while($row = $stmt->fetch(PDO::FETCH_ASSOC)){ //PDO::FETCH_ASSOC 只读取关联部分
    echo var_export($row),'<br>';
}

运行实例 »

点击 "运行实例" 按钮查看在线实例

(6)正确的获取结果集记录数量是用 COUNT(*)然后再用 $stmt->fetchColumn()来进行获取而$stmt->rowCount()不是准确的,有时会出问题.如下:

获取结果集记录数实例

<?php
/**查询操作 */
//连接数据库
$pdo = new PDO('mysql:host=127.0.0.1;dbname=php','root','admin');
//sql语句
$sql = "SELECT `id`,`name`,`email` FROM `user` WHERE `id` < :id;";
//创建预处理对象
$stmt=$pdo->prepare($sql);
//执行查询
$stmt->execute(['id'=>5]);

//获取第一行一列,无法获取同一行的其他列
//echo $stmt->fetchColumn(0),'<br>';
//指针自动下移,第二行第二列
//echo $stmt->fetchColumn(1),'<br>';
//$stmt->rowCount()
$stmt = $pdo->prepare("SELECT * FROM `staff` WHERE `salary`>:salary;");
$stmt->execute(['salary'=>500]);
echo'工资大于一千的人数'.$stmt->rowCount();
//$stmt->rowCount(); 结果看似正确,但有时会出错,统计不到数据
echo '<hr>';
//确实获取方式应该用下面方法
$stmt = $pdo->prepare("SELECT COUNT(*) FROM `staff` WHERE `salary`>:salary;");
$stmt->execute(['salary'=>500]);
echo'工资大于一千的人数'.$stmt->fetchColumn();

运行实例 »

点击 "运行实例" 按钮查看在线实例

总结:主要学习通过mysqli的实例化对象对数据库进行操作,PDO与之相比感觉更容易学习,解理起来更快速.


声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议