博客列表 >20180830 mysqli面向对象编程和PDO编程

20180830 mysqli面向对象编程和PDO编程

乂汁的blog
乂汁的blog原创
2018年09月14日 14:23:05910浏览

一、概述

这节课讲述了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. 预处理一定要有。

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