哎,身为一个穷逼,以前自学在网上找的好几年前的视频,学的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”, $param1,$param2);
PDO
$stmt->bindParam(“:touser”, $param1, PDO::PARAM_STR); //第三个参数不加也没有影响
获得影响行数有所不同
mysqli
$stmt - > affected_rows
$stmt - > num_rows
PDO
$stmt - > rowCount();//增删改查都使用这一个就行,注意有括号
获得 最后插入行的ID或序列值 不同
mysqli
$stmt->insert_id
PDO
$pdo->lastInsertId()