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”, param1,param1,param1,param2);
PDO
$stmt->bindParam(":touser", $param1, PDO::PARAM_STR); //第三个参数不加也没有影响
获得影响行数有所不同
mysqli
stmt−>affectedrowsstmt - > affected_rows stmt−>affectedrows stmt - > num_rows
PDO
$stmt - > rowCount();//增删改查都使用这一个就行,注意有括号
获得 最后插入行的ID或序列值 不同
mysqli
$stmt->insert_id
PDO
$pdo->lastInsertId()
php之预处理(msqli和PDO)相关推荐
- php pdo 预处理删除,PHP PDO扩展整理,包括环境配置\基本增删改查\事务\预处理
介绍 PDO是一种PHP程序连接数据库的接口,通过PDO可以将PHP程序与数据库联系起来. 优点: 1.可移植性,可以支持各种主流数据库服务,而且实现代码几乎都是相同的,使用PDO在代码层面上不需要太 ...
- php pdo mysql 预处理_php -- PDO预处理
可以使用多种方式实现预处理:指的是在绑定数据进行执行的时候,可以有多种方式. 预处理语句中为变量 使用数组指定预处理变量 1.准备预处理语句(发送给服务器,让服务器准备预处理语句) PDOStatem ...
- PHP - PDO 之 mysql 基础操作
PHP - PDO 之 mysql 基础操作 <?php/* pdo 学习 */$dsn = 'mysql:host=localhost;dbname=cswl';//构建连接dsn$db = ...
- php大量数据库抽象,PHP系列(十二)数据库抽象层pdo
PHP系列(十二)数据库抽象层pdo 发布时间:2020-06-01 10:07:54 来源:51CTO 阅读:503 作者:sswqzx 1.数据库抽象层pdo (1).PDO(php data o ...
- php pdo 方法,PHP之pdo操作数据库
PDO概述 1.PDO简介 PDO是PHP数据对象(PHP Data Object)的缩写. PDO扩展为PHP访问不同数据库定义了一个轻量级的.一致性的接口: PDO作用是统一各种数据库的访问接口, ...
- 从PDO下的SQL注入思路到获得GIT 3000star项目0day
0x01 PDO简介 PDO全名PHP Data Object PDO扩展为PHP访问数据库定义了一个轻量级的一致接口.PDO提供了一个数据访问抽象层,这意味着,不管使用哪种数据库,都可以使用相同的函 ...
- php where 优先,php – 使用WHERE选择所有内容
我目前正在开发一个存在多个访问权限的 PHP项目.逻辑很简单: – 当您的访问级别为2时,您只能看到自己项目的列表 – 当您的访问级别为3时,您可以看到所有项目 所以在SQL中: 第一: SELECT ...
- DVWA学习(一)SQL Injection
本文参考自https://www.jianshu.com/u/9dac23b54fba,根据自己的学习进度可能会有不同的地方,详细可以查看原文链接. SQL Injection,即SQL注入,是指攻击 ...
- 【安全漏洞】ThinkPHP 3.2.3 漏洞复现
$this->show 造成命令执行 在 Home\Controller\IndexController 下的index中传入了一个可控参数,跟进调试看一下. class IndexContro ...
- scaner从外网到内网域渗透笔记
scaner 从外网到内网域渗透 1.环境配置 1.1靶场信息 用到的虚拟机共有三个 分别是 12server-db .12-dc .web1 12server-db.web1 这两个可以使用桥接或者 ...
最新文章
- 05-自己创建mapmodel自定义迁移方式
- 频频转型的蘑菇街,能讲好直播这个“老故事”吗?
- 杭州师范大学c语言程序设计机试,2016年杭州师范大学杭州国际服务工程学院程序设计基础考研复试题库...
- 推荐一款配有强大数据管理和可视化ETL的BI工具
- C语言程序设计精要,C语言程序设计精要.doc
- 评判云服务靠谱程度 -- Coding 安全那些事
- 慎重选择博士后(或博士生)导师
- virt viewer Usbredir USB重定向
- 17110102_Windows系统下WebLogicServer12cR2安装详解
- Mark一下,以提醒自己
- JavaScript中的作用域及作用域链
- 贵金属白银与美元的关系
- [Luogu P2597] [BZOJ 2815] [ZJOI2012]灾难
- 【网络通信】学生成绩管理系统(基于JSP/MySQL环境搭建)
- CAD看图软件怎么快速进行对图纸的打印?
- IE 浏览器中不能使remove删除节点的解决方法
- UnityShader---SurfaceShader(模板和各种效果实现:边缘自发光、火焰流动、燃烧、法线扭曲、简单模糊、消融、区域过度、雪效果等)---17
- Linux 命令 —— tree
- float浮点数理解
- python 文件读写w r a w+ r+ a+ rb wb ab总结