Blogger Information
Blog 36
fans 1
comment 0
visits 32470
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
MySQLi查询_PDO增删改查_2018年8月30日
宋超的博客
Original
868 people have browsed it

一.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与之相比感觉更容易学习,解理起来更快速.


Correction status:qualified

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post