Blogger Information
Blog 19
fans 0
comment 2
visits 18410
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
20180830 mysqli面向对象编程和PDO编程
乂汁的blog
Original
905 people have browsed it

一、概述

这节课讲述了PHP在数据库连接和操作中的两种方法,一种是MYSQLI另外是PDO操作。

二、作业部分

1、PDO的优点:

通用接口,适用各种数据库  模块化,加载驱动快,运行速度快

轻型函数,PHP实现了抽象和兼容

2、获取结果集的正确数量

1.$stmt->num_rows(mysqli),

2.$stmt->rowCount()(PDO): 返回受影响的记录数量

3.PDO中select语句计数不能用rowCount(),因为不是“写"操作,用可能会报错。

只能先用count(*),再用fetchColum()获取第一行第一列的数字,也就是计数的个数。

3、编程部分

(1)mysqli

config.php

实例

<?php
$db = [
    'host' =>'127.0.0.1',
    'user' => 'root',
    'psw' => 'root',
    'name' => 'php',
    'charset' => 'utf8',

];

connect.php

实例

<?php
require 'config.php';
error_reporting(E_ALL ^E_WARNING);
$mysqli = new mysqli($db[host],$db[user],$db[psw],$db[name]);
if ($mysqli->errno){
    die($mysqli->errno.':'.$mysqli->connect_error);
}
//echo 'success';

select.php

实例

<?php
//连接数据库
require 'connect.php';
//准备sql语句
$sql = "select `staff_id`,`name`,`salary` from `staff` where `salary` > ? ; " ;
//$sql = "SELECT `name`,`salary`  FROM `staff` WHERE `salary` > ? ;";
//创建预处理对象
$stmt = $mysqli -> stmt_init();
if ($stmt->prepare($sql)){
    //参数绑定
    $stmt->bind_param('i',$salary);
    //设置参数值
    $salary = 5000;
    //执行
    if($stmt->execute()){
        //结果集存放缓存区
        $stmt->store_result();
        //将结果集绑定到数组

        $stmt->bind_result($id,$name, $salary);
        if ($stmt -> num_rows > 0){
//
            while ($stmt->fetch()) {
                echo '<p>id:'.$id.'---姓名:' .$name.'---工资:'.$salary.'</p>';
            }
        }else {
            exit('无数据');
        }
        //释放结果集
        $stmt->free_result();
    }else{
        //执行阶段错误
        exit('执行时'.$stmt->errno.':'.$stmt->error);
    }
}else {
    //检测SQL语句阶段错误
    exit('SQL语句'.$stmt->errno . ':' . $stmt->error);
}
//注销释放预处理对象
$stmt->close();
//关闭连接
$mysqli->close();

结果图:

mysqlli_select.png


(2)PDO

insert.php

实例

<?php
//连接数据库
//$dsn = 'mysql:host=127.0.0.1; dbname=php';
$pdo = new PDO('mysql:host=127.0.0.1;dbname=php','root','root');
//准备SQL语句
$sql = "insert `user` set `user_name`= :name, `email`= :email, `password`=sha1(:password)";
//$sql = "INSERT `user` SET `user_name`= :name , `email`= :email, `password`= sha1(:password)";

//创建预处理对象
$stmt = $pdo->prepare($sql);
//绑定参数,PDO::PARAM_STR表示SQL中char、varchar或者其他字符串类型
$data = ['name'=>'杨过','email'=>'yg@wuxia.com','psw'=>'123'];
$stmt -> bindParam(':name',$data['name'],PDO::PARAM_STR);
$stmt -> bindParam(':email',$data['email'],PDO::PARAM_STR);
$stmt -> bindParam(':password',$data['psw'],PDO::PARAM_STR);
if ($stmt->execute()){
    echo '<h3>成功添加了'.$stmt->rowCount().'条记录';
}else{
    echo '<h3>未成功</h3>';
    print_r($stmt->errorInfo());
    exit();
}

$stmt = null;
$pdo = null;

update.php

实例

<?php
//链接数据库
$pdo = new PDO('mysql:host=127.0.0.1;dbname=php','root','root');
//$pdo = new PDO('mysql:host=127.0.0.1;dbname=php','root','root');

//准备sql语句
$sql = "UPDATE `user` SET `email`= :email WHERE `user_id`= :id";
//创建预处理对象
$stmt = $pdo->prepare($sql);
//绑定参数
$data = ['email'=>'yggg@qq.com','id'=>'9'];
$stmt -> bindParam(':email',$data['email'],PDO::PARAM_STR);
$stmt -> bindParam(':id',$data['id'],PDO::PARAM_STR);
//执行sql语句
if ($stmt->execute()){
    echo '<h3>成功更新',$stmt->rowCount(),'记录';
}else{
    echo  print_r($stmt->errorInfo());
    exit();
}
//释放预处理对象
$stmt = null;
//关闭数据库
$pdo = null;

delete.php

实例

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

//sql语句
$sql = "DELETE FROM `user` WHERE `user_id` = :id";
/*********************************sql语句``不是''**************************/
//创建预处理对象
$stmt = $pdo->prepare($sql);
//缩写绑定+执行命令
//if ($stmt -> execute(['id'=>2]))
if ($stmt->execute(['id'=>9])){
    echo '成功删除',$stmt->rowCount(),'条数据';
}else{
    //exit($stmt->errorInfo());
    echo '<h3>无删除</h3>';
    print_r($stmt->errorInfo());
    exit();
}
//释放对象和关闭连接
$stmt = null;
$pdo = null;

select.php

实例

<?php
$pdo = new PDO('mysql:hos=127.0.0.1;dbname=php','root','root');
$sql = "select `user_name`,`email` from `user` where `user_id` > :id";
$stmt = $pdo->prepare($sql);
//PDO::FETCH_ASSOC 关联数组形式
if ($stmt->execute(['id'=>2])){
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)){
        echo var_export($row),'<br>';
    }
}else{
    echo print_r($stmt->errorInfo());
}
//$stmt = null;
echo '<hr>';
$sql = "select  `name`,`age`,`salary` from `staff` where `salary` > :salary";
$stmt = $pdo->prepare($sql);
$stmt->execute(['salary'=>5000]);
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)){
    echo var_export($row),'<br>';
}
//select语句计数不能用rowCount(),因为不是“写"操作,用可能会报错。
//只能先用count(*),再用fetchColum()获取第一行第一列的数字,也就是计数的个数
$sql = "select  count(*) from `staff` where `salary` > :salary";
$stmt = $pdo->prepare($sql);
$stmt->execute(['salary'=>5000]);
echo '工资大于5000的有',$stmt->fetchColumn(),'人。';
echo '<hr>';
//将结果集绑定到变量上
$sql = "select  `name`,`age`,`salary` from `staff` where `salary` > :salary";
$stmt = $pdo->prepare($sql);
$stmt->execute(['salary'=>5000]);
$stmt->bindColumn('name',$name);
$stmt->bindColumn('age',$age);
while ($stmt->fetch(PDO::FETCH_BOUND)){
    echo '姓名:',$name,',年龄:',$age,'。<br>';

}

connect.php

实例

<?php
//设置数据库类型,服务器,默认数据库
$dsn = 'mysql:host=127.0.0.1;dbname=php';
$user = 'root';
$psw = 'root';
try{
    $pdo = new PDO($dsn,$user,$psw);
    echo 'success';
}catch (PDOException $exception){
    die('connect error :'.$exception->getMessage());
}
//关闭连接
$pdo = null;
//或
//unset($pdo);

结果图:

PDO1.pngPDO2.pngPDO3.png

PDO4.png

3、总结

  1. PDO::PARAM_STR表示SQL中char、varchar或者其他字符串类型

  2. sql语句是``不是''

  3. PDO::FETCH_ASSOC 关联数组形式

  4. select语句计数不能用rowCount(),因为不是“写"操作,用可能会报错。
    只能先用count(*),再用fetchColum()获取第一行第一列的数字,也就是计数的个数

  5. 预处理一定要有。

Correction status:Uncorrected

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