`
摇摇欲醉
  • 浏览: 8318 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

php防sql注入数据model类

    博客分类:
  • php
阅读更多
<?php
class Model{
protected $tableName="";//表名称
protected $pOb;//pdo类对象
function __construct(){
$pdo=new PDO("mysql:host=".DB_HOST.";dbname=".DB_NAME,DB_USERNAME,DB_PASSWORD);
$pdo->exec("set names ".DB_CHARSET);
$this->pOb=$pdo;
}
/*
* 作用:增
* 参数:array $arr exp:array('字段名'=>值,'字段名'=>值,....)
* return:int|false
*/
function add($arr){
//拼sql语句
$kArr=array_keys($arr);
$kStr=join(",",$kArr);
$vArr=array_values($arr);

$pStr = '';
foreach ($vArr as $s=>$y){
$vname = "p".$s;
$pStr.=':'.$vname.',';
}
$pStr = substr($pStr,0,-1);

$sql = "insert into {$this->tableName}($kStr) values($pStr)";

print_r($sql);
$pdoS = $this->pOb ->prepare($sql);
foreach ($vArr as $k=>$y){
$vname = "p".$k;
$$vname = $y;
var_dump($vname,$$vname);
$pdoS -> bindParam(":".$vname, $$vname,PDO::PARAM_STR);

}
$re = $pdoS -> execute();
if($re){//添加成功
//返回主键id值
return $this->pOb->lastInsertId();
}
//返回值
return $re;
}
public function delete($arrWhere){
if(!empty($arrWhere)){
$strW = " where ";
foreach($arrWhere as $kW=>$vW){
$kn = str_replace(":", "", $kW);
if(count($arrWhere)==1){
$strW .= $kn."=".$kW;
}else{
$strW .= $kn."=".$kW." and ";
}
}
if(count($arrWhere)>1){
$strW .= " 1=1 ";
}
}
$sql = "delete from {$this->tableName}".$strW;
print_r($sql);
$pdoS = $this->pOb->prepare($sql);
foreach ($arrWhere as $kW=>$vW){
$kn = str_replace(":", "", $kW);
$$kn = $vW;
if(is_int($vW)){
$pdoS->bindParam($kW,$$kn,PDO::PARAM_INT);
}else if(is_float($vW)){
$pdoS->bindParam($kW,$$kn,PDO::PARAM_INT);
}else{
$pdoS->bindParam($kW,$$kn,PDO::PARAM_STR);
}
}
$re=$pdoS->execute();
if($re){
    return true;
}else {
return false;
}

}
function update($arrSet,$arrWhere){
//拼sql语句
$str = "";
$n=0;
foreach ($arrSet as $kS=>$vS){

$str .= ",".$kS."=:p".$n++;
}
$str = substr($str, 1);
foreach($arrWhere as $kW=>$vW){
$kn=str_replace(":","",$kW);
if(count($arrWhere)==1){
$strW .= $kn."=".$kW;
}else{
$strW .= $kn."=".$kW." and ";
}
}
if(count($arrWhere)>1){
$strW .= " 1=1 ";
}

$sql="update {$this->tableName} set {$str} where ".$strW;
//print_r($sql);

$pdoS=$this->pOb->prepare($sql);
$x = 0;
foreach($arrSet as $kS=>$vS){

$kS = ":p".$x++;
$$kS = $vS;

if(is_int($vS)){
$pdoS->bindParam($kS,$$kS,PDO::PARAM_INT);
}else if(is_float($vS)){
$pdoS->bindParam($kS,$$kS,PDO::PARAM_INT);
}else{
$pdoS->bindParam($kS,$$kS,PDO::PARAM_STR);
}
}


foreach($arrWhere as $kW=>$vW){
$kn=str_replace(":","",$kW);
$$kn=$vW;//$p0  $p1 $p2
if(is_int($vW)){
$pdoS->bindParam($kW,$$kn,PDO::PARAM_INT);
}else if(is_float($vW)){
$pdoS->bindParam($kW,$$kn,PDO::PARAM_INT);
}else{
$pdoS->bindParam($kW,$$kn,PDO::PARAM_STR);
}
}
$re=$pdoS->execute();
if($re){
    return true;

}else{
return false;
}

}
//查
function select($field="*",$ArrayWhere="",$order="",$limit=""){
if(!empty($ArrayWhere)){
$strW = " where ";
foreach($ArrayWhere as $kW=>$vW){
$kn=str_replace(":","",$kW);
if(count($ArrayWhere)==1){
$strW .= $kn."=".$kW;

}else{
$strW .= $kn."=".$kW." and ";
}
}
if(count($ArrayWhere)>1){
$strW .= " 1=1 ";
}
}
if(!empty($order)){
$order="order by ".$order;
}
if(!empty($limit)){
$limit="limit ".$limit;
}
//select 字段列表 from 表名 where 条件 order by 字段 desc|asc limit start,length;
$sql="select {$field} from {$this->tableName} {$strW} {$order} {$limit}";
//print_r($sql);
$pdoS=$this->pOb->prepare($sql);
if(!empty($ArrayWhere)){
foreach($ArrayWhere as $kW=>$vW){
$kn=str_replace(":","",$kW);
$$kn=$vW;
if(is_int($vW)){
$pdoS->bindParam($kW,$$kn,PDO::PARAM_INT);
}else if(is_float($vW)){
$pdoS->bindParam($kW,$$kn,PDO::PARAM_INT);
}else{
$pdoS->bindParam($kW,$$kn,PDO::PARAM_STR);
}
}
}
$re=$pdoS->execute();
if($re){
$pdoS->setFetchMode(PDO::FETCH_ASSOC);
return $pdoS->fetchAll();
}else {
return false;
}

}


}
分享到:
评论

相关推荐

    php+sql成绩查询系统(系统+lw).zip

    此外,我们还采用了安全性的最佳实践,如输入验证、安全过滤和加密存储等,以保护用户数据的安全性。 我们的项目源码具有良好的可读性和可维护性,采用了面向对象的设计原则和模式。我们使用了MVC(Model-View-...

    PHP+SQL公共课平时成绩查询系统(源代码+lw).zip

    此外,我们还采用了安全性的最佳实践,如输入验证、安全过滤和加密存储等,以保护用户数据的安全性。 我们的项目源码具有良好的可读性和可维护性,采用了面向对象的设计原则和模式。我们使用了MVC(Model-View-...

    PHP+SQL考勤系统安全性实现(源代码+lw+指导书).zip

    此外,我们还采用了安全性的最佳实践,如输入验证、安全过滤和加密存储等,以保护用户数据的安全性。 我们的项目源码具有良好的可读性和可维护性,采用了面向对象的设计原则和模式。我们使用了MVC(Model-View-...

    mayfish 数据入库验证代码

    一般在把数据写入数据库之前,先对将要写入的数据进行校验,可以避免出现比较严重的安全问题(例如一般性的SQL注入攻击)。 mayfish 可以灵活的自定义将要执行写入的数据内容的校验规则,以减少开发人员手动对每一个...

    Jingubang:金箍棒-基于SQLMAPAPI的分布式注入系统

    数据库配置文件调试模式已打开,开发结束后切记关闭$ config ['encryption_key']在config / config.php里设置api地址在sql_model里设置请在config / database.php里完成数据库配置多线程预备:apt -get install ...

    mdl.goods.php

    ShopEx是国内一款非常流行的网上商店系统,其4.8.5版本存在SQL注入漏洞,漏洞出现的位置,/core/model_v5/trading/mdl.goods.php文件中。

    databasic:[已弃用] 使用 Titon\Model 包

    清除所有绑定数据以防止 mysql 注入 以对象或关联数组的形式获取数据 记录每个查询的执行时间 支持调试模式 用于 CREATE TABLE、DELETE、DESCRIBE、DROP、UPDATE、INSERT、SELECT、TRUNCATE 和 OPTIMIZE 的预构建...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

     7.SQL Server提供数据仓库功能,这个功能只在Oracle和其他更昂贵的DBMS中才有。  SQL Server 2000与以前版本相比较,又具有以下新特性 :  1.支持XML(Extensive Markup Language,扩展标记语言)  2.强大的...

    EaglePHP 2.7

    13、高安全性,内置Filter组件实现过滤机制,防止SQL注入及XSS跨站脚本攻击。 14、支持ORM,真正实现OOP开发的快捷且性能优越。 15、内置Doc输出模块,为指定项目生成CHM或HTML格式的API开发手册。 安装步骤: ...

    yii2-jobby:Yii2 的 Jobby 包装器

    yii2-jobby 这是一个包。 将任务存储在您的数据库中(键值存储等)。 基本用法 ...可以将您自己的模型类注入到模块中。 您的模型必须实现\jobbyDb\model\JobbyModelInterface 'modules' =&gt; [ ...

    基于J2EE框架的个人博客系统项目毕业设计论...

     7.SQL Server提供数据仓库功能,这个功能只在Oracle和其他更昂贵的DBMS中才有。  SQL Server 2000与以前版本相比较,又具有以下新特性 :  1.支持XML(Extensive Markup Language,扩展标记语言)  2.强大的...

Global site tag (gtag.js) - Google Analytics