php之预处理(msqli和PDO)

哎,身为一个穷逼,以前自学在网上找的好几年前的视频,学的mysql,可惜现在已经不适用了,现在更新一下基础知识,本节介绍一个同mysqli中的面向对象和面向过程以及PDO预处理的格式,下一节做一下后台数据显示页面以便复习一下知识点,ok,就这样,至于概念什么的,请自行百度

mysqli预处理

<?php
$servername   = '127.0.0.1';
$username     = 'root';
$password     = 'weicunbin123';
$dbname       = 'testguest';

// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);

// 检测连接
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}
$conn->set_charset( "utf8" ); // 设置字符集

// 预处理语句,每刷新一次数据库sql语句执行一次

// 增
// 给数据库准备预处理语句,(sql语句,原本需要的文字用 ‘?’ 表示)
$stmt = $conn->prepare("INSERT INTO tg_message (tg_touser,tg_centent) VALUES (? , ?)");
//绑定参数,第一个为类型,其他的与? 一一对应
$stmt->bind_param("ss", $param1,$param2);
/*
 * bind_param第一个参数
 * i  整型integer
 * d  双精度浮点型double
 * s  字符串string
 * b  是一个blob和将发送数据包
*/
// 设置参数并执行
$param1 = 'value1';
$param2 = 'value2';
// 执行
$stmt->execute();          
echo "增:最后ID:".$stmt->insert_id."<br>";
echo "增:影响行数:".$stmt->affected_rows."<br>";


// 删
$stmt = $conn -> prepare("DELETE FROM tg_message WHERE tg_id = ?");
$stmt -> bind_param('i', $param);
$param = 1;
$stmt -> execute();
echo "删:影响行数:".$stmt->affected_rows."<br>";


// 改
$stmt = $conn -> prepare("UPDATE tg_message SET tg_touser = ? WHERE tg_id =  ?");
$stmt -> bind_param('si', $centent,$id);
$centent = '这是修改后的文字';
$id = 9;
$stmt -> execute();
echo "改:影响行数:".$stmt->affected_rows."<br>";


// 查
$stmt = $conn -> prepare("SELECT tg_id,tg_touser FROM  tg_message WHERE tg_id > ?");
$stmt -> bind_param('i',$num);
$num = 15;
$stmt -> execute();
echo "查:记录总数:".$stmt->num_rows;
// 显示搜索到的结果
$stmt -> bind_result ( $tg_id,$tg_touser );//这里参数跟你查询的字段显示个数需要对应起来!
while ( $stmt -> fetch ()) {
    echo $tg_id .'=>'. $tg_touser .'<br>';
}
// 销毁结果集
$stmt->free_result();


$stmt->close();
$conn->close();
?>

PDO预处理

<?php
/*
 * @Descripttion: 
 * @version: 
 * @Author: wei
 * @Date: 2020-04-05 12:23:50
 * @LastEditors: wei
 * @LastEditTime: 2020-04-05 14:35:00
 */
$dbms='mysql';                //数据库类型
$host='localhost';            //数据库主机名
$dbName='testguest';          //使用的数据库
$user='root';                 //数据库连接用户名
$pass='weicunbin123';         //对应的密码
$dsn="$dbms:host=$host;dbname=$dbName";


// 连接数据库
try { 
    $pdo = new PDO($dsn, $user, $pass); //初始化一个PDO对象
    echo "连接成功<br/>";
} catch (PDOException $e) {
    die ("Error!: " . $e->getMessage() . "<br/>");
}
 $pdo->exec("set names utf8"); //设置字符集


// PDO 增,用几种方式实现,其余的可以借鉴一下添加操作
1.1
$stmt = $pdo->prepare("INSERT INTO tg_message (tg_touser,tg_fromuser) VALUES ( :touser,:fromuser)");
$stmt->bindParam(":touser", $param1, PDO::PARAM_STR);       //第三个参数不加也没有影响
$stmt->bindParam(":fromuser", $param2);
$param1 = 'touser';
$param2 = 'fromuser';
$stmt->execute();          
echo  "增:影响行数:".$stmt->rowCount();//影响行数
echo  "增:最后ID:".$pdo->lastInsertId();//自增id
echo '<br>';

//1.2
$stmt = $pdo->prepare("INSERT INTO tg_message (tg_touser,tg_fromuser) VALUES ( :touser,:fromuser)");
$stmt->execute(
    array(':touser' => 'a',':fromuser'=>'b')
);          
echo  "增:影响行数:".$stmt->rowCount();//影响行数
echo  "增:最后ID:".$pdo->lastInsertId();//自增id
echo '<br>';


//2.1
$stmt = $pdo->prepare("INSERT INTO tg_message (tg_touser,tg_fromuser) VALUES ( ? , ?)");
$stmt->bindParam(1, $param1);
$stmt->bindParam(2, $param2);
$param1 = 1;
$param2 = 'fromuser';
$stmt->execute();          
echo  "增:影响行数:".$stmt->rowCount();//影响行数
echo  "增:最后ID:".$pdo->lastInsertId();//自增id
echo '<br>';

//2.2
$stmt = $pdo->prepare("INSERT INTO tg_message (tg_touser,tg_fromuser) VALUES ( ? , ?)");
$stmt->execute(
    array('touser','fromuser')
);          
echo  "增:影响行数:".$stmt->rowCount();//影响行数
echo  "增:最后ID:".$pdo->lastInsertId();//自增id
echo '<br>';

// 3,批量添加
echo  "批量添加";
$stmt = $pdo->prepare("INSERT INTO tg_message (tg_touser,tg_fromuser) VALUES ( ? , ?)");
$arr = array(
    array('1','1'),
    array('2','2')
);
foreach ($arr as $val) {
    $stmt->execute( $val );       
    echo '<br>';
    echo  "增:影响行数:".$stmt->rowCount();//影响行数
    echo  "增:最后ID:".$pdo->lastInsertId();//自增id   
}

// PDO 删
$stmt = $pdo -> prepare("DELETE FROM tg_message WHERE tg_id = ?");
$stmt->execute(array(30));          
echo  "删:影响行数:".$stmt->rowCount();//影响行数
echo '<br>';

// PDO 改
$stmt = $pdo -> prepare("UPDATE tg_message SET tg_touser = ? WHERE tg_id =  ?");
$stmt->execute(array('newname','2'));          
echo  "改:影响行数:".$stmt->rowCount();//影响行数
echo '<br>';

// PDO 查
$stmt = $pdo -> prepare("SELECT tg_id,tg_touser FROM  tg_message WHERE tg_id > ?");
$stmt->execute(array(6));          
echo  "查:影响行数:".$stmt->rowCount();//影响行数
echo '<br>';

echo '显示搜索到的结果:';
while($result=$stmt->fetch(PDO::FETCH_ASSOC)){
    var_dump($result);
    echo '<br>';
}

?>
使用mysqli和PDO实现预处理过程中 参数相同和不同,实现相同功能的对比

相同:

  • 准备预处理语句相同 => 都是数据库对象 -> prepare
    $pdo->prepare
    $conn->prepare

不同:
设置字符集
   mysqli
       $conn->set_charset( “utf8” ); // 设置字符集
   PDO
        $pdo->exec(“set names utf8”); //设置字符集

绑定参数写法不同用法不同,这里只介绍写法
   mysqli
        $stmt->bind_param(“ss”, p a r a m 1 , param1, param1,param2);
   PDO
       $stmt->bindParam(":touser", $param1, PDO::PARAM_STR); //第三个参数不加也没有影响

获得影响行数有所不同
    mysqli
        s t m t − > a f f e c t e d r o w s         stmt - > affected_rows         stmt>affectedrows    stmt - > num_rows
    PDO
        $stmt - > rowCount();//增删改查都使用这一个就行,注意有括号

获得 最后插入行的ID或序列值 不同
    mysqli
        $stmt->insert_id
    PDO
        $pdo->lastInsertId()

posted @ 2022-04-02 09:47  coderwcb  阅读(371)  评论(0编辑  收藏  举报