热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

mysqlistmt预处理的作用

1.防止sql注入很形象的一个例子:你要登录一个网站,上面让你输入用户名字和密码。那么,假如你输入的用户名是admin,但是你不知道密码,你就输入了一个1OR1

1.防止sql注入

很形象的一个例子:
你要登录一个网站,上面让你输入用户名字和密码。那么,假如你输入的用户名是 admin ,但是你不知道密码,你就输入了一个 1' OR '1' = '1 ,那么,你就提交了两个参数给服务器。假如,服务器拿这两个参数拼SQL语句:SELECT T.* FROM XXX_TABLE TWHERE T.USER_ID = '/*param1*/'AND T.PASSWORD = '/*param2*/'那么,你提交的两个参数就使SQL文变成了:SELECT T.* FROM XXX_TABLE TWHERE T.USER_ID = 'admin'AND T.PASSWORD = '1' OR '1' = '1'那么,这个SQL原来的校验功能就被你绕过去了,你的这种行为就称之为SQL注入。

2.提高效率
一个连接里面执行多个select/insert等操作,统一的语句只在数据库预编译一次,每次php只传递参数,从而提高效率。
例子来自网上:
//创建mysqli对象方式 
$mysqli = @new mysqli('127.0.0.1', 'root', '', 'test');

//只能用函数来判断是否连接成功
if(mysqli_connect_errno())
{
    echo mysqli_connect_error();
    die;
}

$mysqli->set_charset('utf8');

$sql = "insert into limove values(?, ?, ?)"; //语句一样值不相同情况

/*
//获取stmt对象
$stmt = $mysqli->stmt_init();

//准备一条sql语句,放到服务器端
$stmt->prepare($sql);
*/

//mysqli中有直接的方法可用
$stmt = $mysqli->prepare($sql);

//绑定参数
$stmt->bind_param('iss', $id, $name, $order); //iss表示类型是Int,string,string

for($i=0;$i<5;$i++){
    $id = 0;
    $name = 'name';
    $order = mt_rand(1, 1000);
    $stmt->execute();

}

//最后id
ee($stmt->insert_id);

//影响的行数 注:最后一条执行的
ee($stmt->affected_rows);

//错误号
ee($stmt->errno);

//错误信息
ee($stmt->error);

//stmt对象中可以看到更多的信息
ee($stmt);

eee($mysqli);

//创建mysqli对象方式 
$mysqli = @new mysqli('127.0.0.1', 'root', '', 'test');

//只能用函数来判断是否连接成功
if(mysqli_connect_errno())
{
    echo mysqli_connect_error();
    die;
}

$mysqli->set_charset('utf8');

$sql = "select * from limove where idprepare($sql);

$stmt->bind_param('i', $i);
$stmt->bind_result($a, $b, $c);

$i=40;
$stmt->execute();

//把结果都取过来
$stmt->store_result();

//获取字段信息
$result = $stmt->result_metadata();//只能获取一些字段信息
while($field = $result->fetch_field())
{
    ee($field->name);
}

//$stmt->data_seek(2); //移动指针的位置,只有执行 store_result 后才能生效

while($stmt->fetch()){
    ee("{$a}|{$b}|{$c}");
}

//记录的条数 ,只有执行 store_result 后才能生效
ee($stmt->num_rows);
ee($stmt);
$stmt->free_result();
$stmt->close();




推荐阅读
author-avatar
简单d-e独白
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有