万能写入sql语句,并且防注入
$pdo=new PDO('mysql:host=localhost;dbname=scms', 'root' );
$_POST=array('title'=>23,'content'=>'kmm');
$keys= array_keys($_POST);
/**
* $filetarr数组用于规定只可以写入的字段
*/
$filetarr=array('title','content');
/**
*$tableName表的名字
*/
$tableName='article';
$filtre=true;
foreach ($keys as $value){
if(in_array($value, $filetarr,true)){ }else{
//var_dump($value);
$filtre=false;
break;
}
} if($filtre){
$fields=implode(',', $keys);
$fieldszwh=':'.implode(',:', $keys);
$sql="insert into {$tableName}({$fields}) values({$fieldszwh})";
$pdostatement= $pdo->prepare($sql);
$pdostatement->execute($_POST);
var_dump($pdostatement->errorInfo());
}else{
echo '非法字段';
}
2.万能条件语句,同样通过字段限制防注入
$pdo=new PDO('mysql:host=localhost;dbname=scms', 'root' );
$_POST=array('title'=>23,'content'=>'km');
$keys= array_keys($_POST);
/**
* $filetarr数组用于规定只可以写入的字段
*/
$filetarr=array('title','content');
/**
*$tableName表名
*/
$tableName='article';
$filtre=true;
$where='';
/**
*$wherearr数组用来根据字段指定查询条件,例如大于,等于,like
*/
$wherearr=array('title'=>'like','content'=>'>%');
foreach ($keys as $value){
if(in_array($value, $filetarr,true)){
if($wherearr[$value]==='between'){ if(count(explode(',', $_POST[$value]))===1){ break; } $where.='and '.$value.' between '.":{$value}left".' and '.":{$value}right "; $_POST[$value]=explode(',', $_POST[$value]); $_POST[$value.'left']=$_POST[$value][0]; $_POST[$value.'right']=$_POST[$value][1]; unset($_POST[$value]); }else{
$where.='and '.$value.' '.$wherearr[$value].' '.":{$value} ";
} }else{
//var_dump($value);
$filtre=false;
break;
}
}
/**
*
*如果用or连接条件语句,截取前面两个字符
*/
$where=substr($where,3);
if($filtre){
$fields=implode(',', $keys);
$fieldszwh=':'.implode(',:', $keys); $sql="select * from {$tableName} where {$where}";
var_dump($sql);
$pdostatement= $pdo->prepare($sql);
$pdostatement->execute($_POST);
$re= $pdostatement->fetchAll();
var_dump($pdostatement->errorInfo());
var_dump($_POST);
var_dump($re);
}else{
echo '非法字段';
}
万能写入sql语句,并且防注入的更多相关文章
- IDEA的GUI连接数据库写入SQL语句的问题总结
一.首先是建立游标的对象statement 插入数据excuteUpdate需要的是一个整型的参数,所以建立的对象要是一个int型的数据类型,才可以执行SQL语句excuteQuery是一个字符类型在 ...
- MSSQL注入常用SQL语句整理
很多情况下使用工具对mssql注入并不完善,所以我们就需要手工注入,一下是本人收集的一些mssql的sql语句. 手工MSSQL注入常用SQL语句 and exists (select * from ...
- Hibernate输出SQL语句以便调试
配置方法:1.打开hibernate.cfg.xml文件编辑界面,在Properties窗口处,点击Add按钮,选择Show_SQL参数,输入值为True. *另外,如果按照同样的步骤,分别加入以下参 ...
- 关于在Java代码中写Sql语句需要注意的问题
最近做程序,时不时需要自己去手动将sql语句直接写入到Java代码中,写入sql语句时,需要注意几个小问题. 先看我之前写的几句简单的sql语句,自以为没有问题,但是编译直接报错. String st ...
- Excel 中使用sql语句查询
将Excel连接Oracle数据库 Excel选项板中"数据"—"自其他来源"下拉菜单中有有个可以连接其它数据库的选项"来自数据连接向导"和 ...
- 在JDBC中实现SQL语句的模糊查询
在JDBC中实现SQL语句的模糊查询 在大多数情况下我们可以在JDBC中写入sql语句通过占位符的方式来直接查询,但是如果要进行模糊查询,需要转义字符才能够正常查询. sql语句: select * ...
- MySQL注入点与SQL语句的关系
目录 注入位置分类 内联式 - UNION query SQL injection 终止式 - End SQL injection 堆叠式 - Stacked queries SQL injectio ...
- mybatis 的sql语句及使用mybatis的动态sql mybatis防注入
由于看到写的比较详细的文档这里将之前的删掉了,只留下一些我认为能帮助理解的和关于动态sql及防注入的一些理解.文档链接 :mybatis官方文档介绍 <!-- 根据条件查询用户 --> ...
- C# sql语句拼接时 like情况的防sql注入的用法
今天下午同事问我一个比较基础的问题,在拼接sql语句的时候,如果遇到Like的情况该怎么办. 我原来的写法就是简单的拼接字符串,后来同事问我如果遇到sql注入怎么办.我想了下,这确实是个问题. 刚在网 ...
随机推荐
- php的数据访问
方法一:过去时方法 $定义一个变量 = $mysql_connect("要连接的服务器,默认是 localhost","登录所使用的用户名,默认是 root", ...
- Javascript ----字符串(String)中的方法
涉及字符串时,常用到的几个方法... --------------------------------------------------------------------------------- ...
- [IE兼容性] Table 之边框 (IE6 IE7 IE8(Q) 中 cellspacing 属性在重合的边框模型的表格中仍然有效)
在 IE6 IE7 IE8(Q) 中,在通过 border-collapse:collapse 使用表格的重合边框模型后,其 cellspacing 属性仍然有效: 在 其他浏览器 中,此时的 cel ...
- IOS图片缩放
1.自动缩放到指定大小 + (UIImage *)thumbnailWithImage:(UIImage *)image size:(CGSize)asize { UIImage *newimage; ...
- Drools规则文件结构说明
一.规则文件构成 package(规则文件所在包) import(导入java包) global(规则文件中的"全局变量") function(函数) query(查找) rule ...
- 解决Xcode7.1插件安装的办法
现象一. 运行安装后,没有出现在菜单上. 1. 到githup上下载Alcatraz project https://github.com/supermarin/Alcatraz2. 打开终端 3. ...
- HDU5534--Partial Tree (完全背包)
点击打开链接 思路:总度数为2n-2,由于每个节点都至少要有1个度,所以可以看做把剩余n-2个点放入n个节点的背包问题.dp[i]表示放入i个度后的最大值 #include<cstdio> ...
- Java可变参数/可变长参数
Java可变参数/可变长参数 传递的参数不确定长度,是变长的参数,例如小例子: package demo; public class Demo { public static int sum(int ...
- magento -- 添加新产品时状态默认为激活,库存状态默认为有库存
添加新产品时状态默认为激活 打开文件/app/code/core/Mage/Catalog/Model/Product/Status.php,注释掉“Please Select” /** * Retr ...
- GET请求和POST请求简单说明
一.概述 * HTTP/1.1协议共定义了8中请求方法:OPTIONS, HEAD, GET, POST, PUT, DELETE, TRACE, CONNECT. * GET方法和POST是我们使用 ...