批改状态:未批改
                        老师批语:
                    
                            一、概述
这节课讲述了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();结果图:

(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);结果图:




3、总结
PDO::PARAM_STR表示SQL中char、varchar或者其他字符串类型
sql语句是``不是''
PDO::FETCH_ASSOC 关联数组形式
select语句计数不能用rowCount(),因为不是“写"操作,用可能会报错。
只能先用count(*),再用fetchColum()获取第一行第一列的数字,也就是计数的个数
预处理一定要有。
                Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号