PHP(Mysqli和PDO)预处理
PHP预处理主要是用来防SQL注入的,开发程序的都明白这样一个道理,不能相信用户的任何输入,如果用户输入问题你没有做相应的安全,
那么:你的程序是很危险的,很容易被攻击的!预处理:只分析两个:mysqli和PDO,因为这两个是PHP开发者用得比较多的;
mysql 在PHP 高版本里边已经不支持了。
一、Mysqli预处理防SQL注入
博主讲解了mysqli预处理的全部,包含增、删、改、查的预处理,不过:一般用不上这么多。主要是插入数据做好预处理即可!其它的是否做预处理要根据你的场景来;
<?php
$serveraddress='localhost'; //服务器地址
$user='root'; //用户名
$password='root'; //密码
$database='test'; //数据库
$mysqli = new mysqli ( $serveraddress , $user , $password , $database );
if ( mysqli_connect_errno ()) {
printf ( "Connect failed: %s\n" , mysqli_connect_error ());
exit();
}
$mysqli->set_charset( "utf8" ); // 设置字符集
$catname='test';
$parentid=12;
//mysqli插入
$sql='insert into cat (cat_name,parent_id) values(?,?)';
$stmt=$mysqli->prepare($sql);
$stmt->bind_param('si',$catname,$parentid );
/*
i 整型integer
d 双精度浮点型double
s 字符串string
b 是一个blob和将发送数据包
*/
$stmt->execute();
if($id=$stmt->insert_id){
echo $id; //得到插入返回的ID
}
$catname='test';
$catid=66;
//mysqli修改
$sql='update cat set cat_name=? where cat_id=?';
$stmt=$mysqli->prepare($sql);
$stmt->bind_param('si',$catname,$catid );
if($stmt->execute()){
echo '修改成功!';
}
$catid=68;
//mysqli删除
$sql='delete from cat where cat_id=?';
$stmt=$mysqli->prepare($sql);
$stmt->bind_param('i',$catid );
if($stmt->execute()){
echo '删除成功!!';
}
$catid=10;
//mysqli查询多行
$sql='select cat_name,parent_id from cat where cat_id<?';
$stmt=$mysqli->prepare($sql);
$stmt->bind_param('i',$catid );
$stmt->execute();
$stmt -> bind_result ( $name , $code );//这里参数跟你查询的字段显示个数需要对应起来!
while ( $stmt -> fetch ()) {
echo $name.'=>'.$code;
}
$catid=12;
//mysqli查询一行
$sql='select cat_name,parent_id from cat where cat_id=?';
$stmt=$mysqli->prepare($sql);
$stmt->bind_param('i',$catid );
$stmt->execute();
$stmt -> bind_result ( $name , $code );
while ( $stmt -> fetch ()) {
echo $name.'=>'.$code;
}
二、PDO预处理防SQL注入
PDO面向对象函数有很多,都可以综合运用的,以下是博客有了不同函数实现的效果,一定要明白函数的原理,有很多函数它的作用其实是一样的;你只需要记住几个步骤:
1:连接数据库
2:设置字符集
3:准备SQL语句
4:替换SQL语句
5:发送SQL语句
6:得到SQL结果,可以是值,可以是布尔型,也可以是对象,数组等;
同样,PDO博主也做了它的增、删、改、查,虽然说并不是完全有必要,但是总会有一些项目,它的这些都需要做预处理的;记住:永远不要相信用户的任何输入!
<?php
$dsn = 'mysql:dbname=test;host=localhost' ;//数据库类型,数据库,主机名
$user = 'root' ;//用户名
$password = 'root' ; //密码
$conn = new PDO ( $dsn , $user , $password );
$conn->exec("set names utf8"); //设置字符集
$catname='test';
$parentid=66;
$sql='insert into cat (cat_name,parent_id) values(:catname,:parentid)';
//PDO插入方法一
$sth=$conn->prepare($sql,array( PDO :: ATTR_CURSOR => PDO :: CURSOR_FWDONLY));
$sth->execute(array(':catname'=>$catname,':parentid'=>$parentid));
if($id=$conn->lastInsertId()){
echo $id; //得到插入返回的ID
}
//PDO插入方法二
$sth=$conn->prepare($sql);
$sth -> bindParam ( ':catname' , $catname , PDO :: PARAM_STR );
$sth -> bindParam ( ':parentid' , $parentid , PDO :: PARAM_INT , 12 );//参数标识,绑定的变量名,参数类型(选填),数据类型长度(选填)
$sth -> execute ();
if($id=$conn->lastInsertId()){
echo $id; //得到插入返回的ID
}
$catname='test';
$catid=88;
//PDO修改
$sql='update cat set cat_name=? where cat_id=?';
$sth=$conn->prepare($sql);
$sth->bindParam(1, $catname);
$sth->bindParam(2,$catid);
if($sth->execute()){
echo '修改成功!';
}
$catid=91;
//PDO删除
$sql='delete from cat where cat_id=:catid';
$sth=$conn->prepare($sql);
$sth->bindValue(':catid',$catid,PDO::PARAM_INT);
if($sth->execute()){
echo '删除成功!';
}
$catid=10;
//PDO查询多行
$sql='select cat_name,parent_id from cat where cat_id<?';
$sth=$conn->prepare($sql);
$sth->bindParam(1,$catid);
$sth->execute();
$result=$sth->fetchAll();
//var_dump($result);
foreach ($result as $k => $v){
echo $v['cat_name'].'=>'.$v['parent_id'];
}
$catid=12;
//PDO查询一行
$sql='select cat_name,parent_id from cat where cat_id=:catid';
$sth=$conn->prepare($sql);
$sth->bindParam(':catid',$catid);
$sth->execute();
$result=$sth->fetch(PDO::FETCH_ASSOC);
var_dump($result);
/*
FETCH_ASSOC、FETCH_BOTH、FETCH_BOUND、FETCH_CLASS、FETCH_COLUMN、FETCH_FUNC、GROUP、INTO、KEY_PAIR、LAZY、NAMED、NUM、OBJ、ORI_ABS......
*/
PHP(Mysqli和PDO)预处理的更多相关文章
- PHP连接MySQL数据库的三种方式(mysql、mysqli、pdo)
PHP与MySQL的连接有三种API接口,分别是:PHP的MySQL扩展 .PHP的mysqli扩展 .PHP数据对象(PDO) ,下面针对以上三种连接方式做下总结,以备在不同场景下选出最优方案. P ...
- MySQLi 和 PDO 连接 MySQL
PHP 连接 MySQL PHP 5 及以上版本建议使用以下方式连接 MySQL : MySQLi extension ("i" 意为 improved) PDO (PHP Dat ...
- 使用 MySQLi 和 PDO 向 MySQL 插入多条数据
PHP MySQL 插入多条数据 使用 MySQLi 和 PDO 向 MySQL 插入多条数据 mysqli_multi_query() 函数可用来执行多条SQL语句. 以下实例向 "MyG ...
- 解决 Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in
转载 php 5个版本,5.2.5.3.5.4.5.5,怕跟不上时代,新的服务器直接上5.5,但是程序出现如下错误:Deprecated: mysql_connect(): The mysql ext ...
- mysql、mysqli、PDO一句话概括比较
mysql.mysqli.PDO一句话概括比较 1 mysql扩展 (注:原始的,较差) 2 mysqli扩展(面向过程式) (注:比上面多了更多功能) 3 mysqli扩展(面向对象式) (注:比上 ...
- MySQL pdo预处理能防止sql注入的原因
MySQL pdo预处理能防止sql注入的原因: 1.先看预处理的语法 $pdo->prepare('select * from biao1 where id=:id'); $pdo->e ...
- 解决Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in
php 5个版本,5.2.5.3.5.4.5.5,怕跟不上时代,新的服务器直接上5.5,但是程序出现如下错误:Deprecated: mysql_connect(): The mysql extens ...
- PHP中MySQL、MySQLi和PDO的用法和区别
PHP的MySQL扩展(优缺点) 设计开发允许PHP应用与MySQL数据库交互的早期扩展.mysql扩展提供了一个面向过程 的接口: 并且是针对MySQL4.1.3或更早版本设计的.因此,这个扩展虽然 ...
- [mysql] mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in
From: http://www.ttlsa.com/php/deprecated-mysql-connect/ php 5个版本,5.2.5.3.5.4.5.5,怕跟不上时代,新的服务器直接上5.5 ...
随机推荐
- Java应用程序项目的打包与发行
Java应用程序项目的打包与发行 这里主要是讲解一下怎样将 Java程序打包成独立运行的exe程序包,以下这种方法应该是最佳的解决方案了.NetDuke的EXE 程序包了是使用这种方案制作的.在 ...
- linux中的ll(转)
linux中的ll(转) 操作系统:ubuntu 9.04 ll并不是linux下一个基本的命令,它实际上是ls -l的一个别名. Ubuntu默认不支持命令ll,必须用 ls -l,这样使用起来不是 ...
- CAS (2) —— Mac下配置CAS到Tomcat(客户端)
CAS (2) -- Mac下配置CAS到Tomcat(客户端) tomcat版本: tomcat-8.0.29 jdk版本: jdk1.8.0_65 cas版本: cas4.1.2 cas-clie ...
- kafka+storm+hbase
kafka+storm+hbase实现计算WordCount. (1)表名:wc (2)列族:result (3)RowKey:word (4)Field:count 1.解决: (1)第一步:首先准 ...
- MySQL 源代码scr.rpm安装的一点注意事项
rpm安装包通常为二进制包(Binary)以及源代码包(Source)两种形式. 在使用源代码方式安装MySQL的时候,官方站点上下载的源代码包通常为scr.rpm格式,而不是直接的tar包.对此,须 ...
- ipad safari 滚动(overflow)解决方案
项目需要放到ipad应用了,发现有一个奇怪的问题,就是我div是设置滚动属性的,在pc上面的各个浏览器页面变小时,会出现滚动条,可是是ipad的safari,则不会滚动,开始以为是div的问题 但发现 ...
- Linux进程同步机制
为了能够有效的控制多个进程之间的沟通过程,保证沟通过程的有序和和谐,OS必须提供一定的同步机制保证进程之间不会自说自话而是有效的协同工作.比如在共享内存的通信方式中,两个或者多个进程都要对共享的内存进 ...
- EasyUI-datagrid中load,reload,loadData方法的区别
EasyUI比较常用,其中的datagrid比较复杂,它有其中有load,reload,loadData这三个方法,它们都有相同的功能,都是加载数据的,但又有区别. load方法,比如我已经定义一个d ...
- 免费 web api 接口大全
下面的接口来自互联网,部分功能需要付费 查询手机 http://www.yodao.com/s-martresult-xml/search.s?type=mobile&q= 手机号码 查询 I ...
- 关于Cocos2d-x很多奇怪的报错
1.说什么找不到类和命名空间,但是已经包含头文件 项目-属性-配置属性-C/C++-附加包含目录-编辑-添加新行-写上$(EngineRoot) 2.很多语句报错,但是都没问题 我是这样理解的,书上的 ...