通过perpare()方法和检查字段防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语句,并且防注入的更多相关文章

  1. IDEA的GUI连接数据库写入SQL语句的问题总结

    一.首先是建立游标的对象statement 插入数据excuteUpdate需要的是一个整型的参数,所以建立的对象要是一个int型的数据类型,才可以执行SQL语句excuteQuery是一个字符类型在 ...

  2. MSSQL注入常用SQL语句整理

    很多情况下使用工具对mssql注入并不完善,所以我们就需要手工注入,一下是本人收集的一些mssql的sql语句. 手工MSSQL注入常用SQL语句 and exists (select * from ...

  3. Hibernate输出SQL语句以便调试

    配置方法:1.打开hibernate.cfg.xml文件编辑界面,在Properties窗口处,点击Add按钮,选择Show_SQL参数,输入值为True. *另外,如果按照同样的步骤,分别加入以下参 ...

  4. 关于在Java代码中写Sql语句需要注意的问题

    最近做程序,时不时需要自己去手动将sql语句直接写入到Java代码中,写入sql语句时,需要注意几个小问题. 先看我之前写的几句简单的sql语句,自以为没有问题,但是编译直接报错. String st ...

  5. Excel 中使用sql语句查询

    将Excel连接Oracle数据库 Excel选项板中"数据"—"自其他来源"下拉菜单中有有个可以连接其它数据库的选项"来自数据连接向导"和 ...

  6. 在JDBC中实现SQL语句的模糊查询

    在JDBC中实现SQL语句的模糊查询 在大多数情况下我们可以在JDBC中写入sql语句通过占位符的方式来直接查询,但是如果要进行模糊查询,需要转义字符才能够正常查询. sql语句: select * ...

  7. MySQL注入点与SQL语句的关系

    目录 注入位置分类 内联式 - UNION query SQL injection 终止式 - End SQL injection 堆叠式 - Stacked queries SQL injectio ...

  8. mybatis 的sql语句及使用mybatis的动态sql mybatis防注入

    由于看到写的比较详细的文档这里将之前的删掉了,只留下一些我认为能帮助理解的和关于动态sql及防注入的一些理解.文档链接  :mybatis官方文档介绍 <!-- 根据条件查询用户 --> ...

  9. C# sql语句拼接时 like情况的防sql注入的用法

    今天下午同事问我一个比较基础的问题,在拼接sql语句的时候,如果遇到Like的情况该怎么办. 我原来的写法就是简单的拼接字符串,后来同事问我如果遇到sql注入怎么办.我想了下,这确实是个问题. 刚在网 ...

随机推荐

  1. PHP同一个IP绑定多个域名(六)

    原理图 一个ip绑定如何绑定多个域名? 解决方案: A.方案一:端口号来区别不同的站点 1.绑定一个网站 1.1先开发好自己的网站 d:/ApacheProject/myanimal 1.2 配置我们 ...

  2. c++的调试与运行

    编译F9:运行F10:编译运行F11. 设置断点:在代码所在行的行首单击,该行即被加亮.注意:设置断点后,此时程序运行进入调试状态,要想运行程序,就不能使用F10或者F11,而是要使用F5调试,然后使 ...

  3. rcc

    一.在STM32中,有五个时钟源,为HSI.HSE.LSI.LSE.PLL.   全名: high  speed  external ①HSI是高速内部时钟,RC振荡器,频率为8MHz. ②HSE是高 ...

  4. javascript正则表达式替换字符串

    var reg = /^per_list(.*)[\d]{1,}(.*)/;var str = "per_listAmtApril1.value";var replaceStr = ...

  5. 过期邮件替换SQL

  6. 显示ios设备信息的程序

    以下是运行在本人iphone4上的截图,支持中文简体,中文繁体,英文,支持iphone和ipad,当然由于没有ipad,ipad的测试用的模拟器.支持iphone4的Retina屏幕.本来有6个标签, ...

  7. iOS开发之瞬间位移动画效果

    步骤:1.使用single view application 创建一个新的项目 2.在.h文件中遵守<UIGestureRecognizerDelegate>协议,创建一个UIimagev ...

  8. Interview---一道有趣的推理题

    题目描述: 一个岛上有100个人,他们的眼睛只有两种颜色,蓝色和红色.95个人是黑色,其余5人是红色. 他们有个宗教信仰,从不照镜子,所以他们自己不知道自己的眼睛的颜色.但是能看到其他人的眼睛. 他们 ...

  9. STL 源码分析《1》---- list 归并排序的 迭代版本, 神奇的 STL list sort

    最近在看 侯捷的 STL源码分析,发现了以下的这个list 排序算法,乍眼看去,实在难以看出它是归并排序. 平常大家写归并排序,通常写的是 递归版本..为了效率的考虑,STL库 给出了如下的 归并排序 ...

  10. BZOJ 1816 扑克牌

    WA的我怀疑人生.. 发现原来是循环中间就要break掉,不然爆int. 总感觉这题可以直接构造啊.. #include<iostream> #include<cstdio> ...