万能写入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注入怎么办.我想了下,这确实是个问题. 刚在网 ...
随机推荐
- <二叉树的基本操作(有层次遍历)>
#include<stdio.h> #include<stdlib.h> #include<string.h> #define num 100 #define OK ...
- poj2649 数论
//Accepted 420K 16MS //考虑 0和n! does not divide // 1和0! divides #include <cstdio> #include < ...
- MagSpoof:能预测并窃取你下一张信用卡号码的廉价设备
想象一下,你丢失了信用卡,并从银行申请了一张新的信用卡.但是,如果在你收到这张新卡之前,一些网络罪犯就已经在使用你的新信用卡,此时你作何感想?是的,这完全是可以实现的,至少使用这个仅仅10美元的设备M ...
- 封装定制的Kali Live ISO
打造专属的Kali ISO – 简介 封装定制的Kali ISO很简单,很有趣,很有意义.你可以用Debian的live-build脚本对Kali ISO进行全面的配置.这些脚本以一系列配置文件的方式 ...
- BZOJ 1968 约数研究
其实打个表就会发现,这个玩意儿是积性的,然后很happy的搞了一下. 不,不是这样. 考虑每个约数对答案的贡献,不难发现:约数i的贡献为n/i. 加之即可. #include<iostream& ...
- 链表(C++语言实现)
我使用的是严蔚敏的数据结构C语言版,很反感里面的全是伪代码,平常也没怎么敲代码,链表和顺序表是数据结构的第一个实验课程,顺序表还好,但是链表就有点困难了,因为里面涉及指针的运用.我对于指针并不是很精通 ...
- HTML的盒子模型
每个HTML元素都可以看作一个装了东西的盒子,盒子具有宽度(width)和高度(height),盒子里面的内容到盒子的边框之间的距离即填充(padding),盒子本身有边框(border),而盒子边框 ...
- UNIX,基础知识,文件IO,文件和目录
2015.1.27星期二,早晨阴天,中午下雪了今天上午老师不上课,程序语句,记一下:main(void){ int c; while((c = getc(stdin)) != EOF) if(putc ...
- if语句解一元二次方程~
#include<stdio.h>#include<math.h> void main(){ double a,b,c,x1,x2; printf("请输入a&q ...
- 【avalon源码】scpCompile
function noop() {} function scpCompile(array) { return Function.apply(noop, array) } // var fn = new ...