mysqli stmt 预处理的作用
来源:互联网 发布:手机音频合成软件 编辑:程序博客网 时间:2024/04/30 02:24
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,stringfor($i=0;$i<5;$i++){ $id = 0; $name = 'name'; $order = mt_rand(1, 1000); $stmt->execute();}//最后idee($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 id<?";$stmt = $mysqli->prepare($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();
0 0
- mysqli stmt 预处理的作用
- 使用mysqli扩展库 预处理技术 mysqli stmt
- php学习笔记(二十)mysqli的stmt的预处理类的使用(防止sql注入问题)
- mysqli学习笔记 mysqli连接,multi_query多语句查询,SQL预处理stmt,事务处理
- mysqli的预处理
- PHP学习 mysqli的 预处理
- 运用MySQLI扩展库的预处理功能...
- mysqli扩展库的预处理机制
- MySQLi实现数据库操作的预处理
- 预处理 #error 的作用
- mysqli预处理详解
- mysqli 预处理详解
- mysqli预处理和事务处理
- PHP-----mysqli编译预处理
- PHP mysqli 预处理
- STMT的测试
- sql语句的预处理mysqli pdo绑定参数
- mysqli使用预处理技术进行数据库查询的方法
- Encryto Message
- Nginx的命令行控制-转自《深入理解Nginx模块开发与架构解析》第2版
- hdu 1556 color the balls
- JS笔记:局部变量与全局变量
- Volley net
- mysqli stmt 预处理的作用
- 【BZOJ3294】[Cqoi2011]放棋子【计数DP】
- python提取知乎首页问答的url
- 第7周-项目1-成员函数、友元函数和一般函数有区别
- Cocos2d-x 3.9教程:10.使用CocosStudio的UI编辑器从UI文件中加载布局和控件
- 面试问题--数据安全分析师
- UVA699(树)
- Dialog中使用handler时报:Can't create handler inside thread that has not called Looper.prepare()
- Android中WebView播放网上视频,横竖屏切换