在PHP中使用 mysqli 并防SQL注入
来源:互联网 发布:linux 如何退出vi 编辑:程序博客网 时间:2024/05/16 04:52
自从 php5 推出 mysqli 后就开始不提倡使用 mysql_ 开头的接口了,现在使用 mysql_connet 通常调试的时候会报警告说这个不该用
mysqli 使用起来其实更简单
$url = "localhost";$usr = "root";$paw = "123";$database = "mdb";//$link = 0;$link = mysqli_connect($url,$usr,$paw,$database) or die("Error " . mysqli_error($link));$query = "SELECT gitid,cid from carts where uid = $uid ";$result = $link->query($query);while($row=mysqli_fetch_array($result)){//do you action}
PDO其实也是不错的选择,mysqli自然更方便
官网其实已经说明了:http://php.net/manual/en/mysqlinfo.api.choosing.php
下面讲讲如何在服务器端防注入(当然用JS检查表单也很常用)。
SQL注入很容易理解,例如获取表单数据
$postedName = $_POST['name_input'];$query = "INSERT INTO table_name (name) values ('$postedName')";
那么坏人如果给你的 name_input 里不是个正常名字而是如下这样
jack'"; Drop table table_name; "'-如果这时候还直接傻乎乎地 query 那就麻烦了。
PHP这个放注入的思路其实就是限制了query语句的自由度:参数就是参数,不要想加个分号变成一个命令。
这样做:
$stmt = $mysqli->prepare("INSERT INTO table_name (name) VALUES (?)");$stmt->bind_param('s', $postedName);//只要确保参数在下一步 execute 之前赋值就行了$stmt->execute();很简单, 在 prepare 函数里面把参数用 ‘?’ 来替代,然后使用 bind_param 绑定参数。在 bind_param 中,第一个参数 's' 代表了参数的类型与个数(此处为一个字符串类型)。如官方的例子
$stmt = $mysqli->prepare("INSERT INTO CountryLanguage VALUES (?, ?, ?, ?)");$stmt->bind_param('sssd', $code, $language, $official, $percent);就是绑定了四个参数,三个为字符串,一个为数字。非常简便。
这样一来就不用怕一个参数被恶意扩展为一个语句来捣乱了。
0 0
- 在PHP中使用 mysqli 并防SQL注入
- mysqli防SQL注入(代码方面)
- 防sql注入 php中get_magic_quotes_gpc配置
- PHP SQL防注入
- php sql 防注入
- php防sql注入
- php 防sql注入?
- php防sql注入
- php防注入--sql
- php防sql注入
- php防sql注入
- php防sql注入
- PHP中防XSS攻击和防sql注入
- 在php-5.1.4中使用mysqli
- 在PHP中使用Mysqli操作数据库
- 在PHP中使用Mysqli操作数据库
- PHP中mysqli使用
- PHP防SQL注入处理
- 【SzNOI语法百题】【d012】优惠购物
- 页面静态化
- moodle 在centos 下的安装
- windows 7的IIS关于ASP+access数据库连接错误的解决办法
- 来,你敢在python交互式解析器中输入 import this 吗?
- 在PHP中使用 mysqli 并防SQL注入
- WPF DataGrid控件
- C# 中DateTime的各种使用
- 教你如何做一款让用户上瘾的产品
- AutoFac20150128
- Python权威指南之如何使用静态类或抽象函数
- Java异常的分类
- C++ Builder 全部API函数列表
- js上传前预览,兼容IE、谷歌等浏览器