`
摇摇欲醉
  • 浏览: 8888 次
  • 性别: 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;
}

}


}
分享到:
评论

相关推荐

    HDwiki-sql注入1

    标题 "HDwiki-sql注入1" 描述的内容涉及到一个针对HDwiki系统的SQL注入漏洞。这个漏洞出现在PHP代码处理用户输入不当时,导致攻击者能够利用它执行恶意的SQL命令。 首先,我们来看一下问题的关键部分。`array_walk`...

    php网上购物系统+sql数据库

    4. **安全性**:在PHP与SQL交互时,需要防止SQL注入攻击,即恶意用户通过输入特殊构造的SQL语句来操纵数据库。使用预处理语句或参数化查询可以有效避免这类问题。 5. **Web交互**:购物系统通常采用MVC(Model-View...

    对于ThinkPHP框架早期版本的一个SQL注入漏洞详细分析

    但即使是成熟的框架也可能存在安全漏洞,例如文件ThinkPHP/Lib/Core/Model.class.php中的SQL注入漏洞就是一个例子,它发生在ThinkPHP3.1.3及更早的版本中。 SQL注入是一种常见的网络攻击手段,攻击者通过在数据库...

    OneThink前台注入分析1

    在OneThink中,SQL注入是一种常见的安全风险,主要是由于不当处理用户输入数据导致的。在描述中提到的场景中,攻击者通过审计和尝试,找到了一个利用前台注入进入后台的方法。具体来说,这个过程涉及到了模型(Model)...

    ThinkPHP v3.2.X(SQL注入&文件读取)反序列化POP链1

    《ThinkPHP v3.2.X 反序列化漏洞与SQL注入及文件读取利用分析》 ThinkPHP是一款广泛使用的PHP框架,其3.2.*版本存在反序列化漏洞,允许攻击者通过精心构造的数据包触发特定行为,如SQL注入和文件读取。本文将深入...

    运用php+sql技术完成的论坛

    7. 安全性:了解如何防止SQL注入、XSS攻击等安全问题,使用预编译语句、参数绑定等方式提高代码安全性。 8. 错误处理和调试:学习PHP的错误报告机制,以及如何编写健壮的代码来处理可能出现的异常情况。 9. MVC...

    PHP与SQL Server 2000架构Windows Web数据库实务

    7. **安全性**:了解如何防止SQL注入攻击,使用预编译语句和参数化查询,以及设置合适的数据库权限,确保系统的安全性。 8. **Web应用架构**:探讨如何设计和实现一个基于PHP和SQL Server 2000的Web应用架构,包括...

    execel tosql php下读取EXECL文件中数据

    同时,对读取的数据进行转义或预处理,防止SQL注入攻击。 8. **错误处理**:程序应当包含适当的错误处理机制,比如文件不存在、格式不正确、数据无法转换等,确保系统稳定运行。 9. **性能优化**:当Excel文件较大...

    test_sql_sql_MYSQL_php_phpmysql_

    4. **安全性**:由于在描述中提到了"安全",所以这些PHP文件可能会包含预防SQL注入、XSS攻击等安全措施。比如使用预处理语句、过滤用户输入、设置合适的权限等。 5. **文件上传**:"文件大小限制解除"可能意味着有...

    php实现的简单数据库操作Model类

    这个简单的Model类虽然提供了基本的数据库操作功能,但在实际项目中可能需要扩展以适应更复杂的需求,例如错误处理、事务管理、预处理语句以防止SQL注入等。此外,随着项目规模的增长,可能需要考虑使用ORM(对象...

    php与sql server 2000架构windows web数据库实务

    书中会涉及如何防止SQL注入、跨站脚本攻击(XSS)和其他常见的网络安全威胁,并提供相应的预防措施。 7. 错误处理与调试:书中将指导读者如何有效地处理程序错误,调试PHP代码,以及优化SQL查询性能。 8. 实战项目...

    Plan_model_php_

    6. **预处理语句**:为了防止SQL注入,`Plan_model`可能会使用预处理语句来构建和执行SQL命令。 描述中的“hello io want to move this file to decode”看起来像是一个拼写错误或者不完整的句子,可能意味着用户想...

    PHP文件数据类网站实例开发源码——和其MySQL备份.rar

    在实际的网站开发中,还需要考虑安全性问题,如防止SQL注入,这可以通过预处理语句或者使用PDO(PHP Data Objects)扩展来实现。另外,为了优化性能,需要了解索引的创建和使用,以及适当的数据库设计原则。 对于...

    PHP+SQL考勤系统安全性实现(源代码+论文+答辩PPT+指导书).zip

    开发者需要了解如何设计高效的数据库结构和编写安全的SQL查询,以防止SQL注入攻击。 3. 安全性实现:考勤系统涉及到员工的个人信息和出勤记录,因此安全性至关重要。这里包括密码哈希存储、输入验证、防止XSS攻击...

    PHP+SQL成绩查询系统(系统+论文+答辩PPT).rar

    3. PHP的PDO(PHP Data Objects)扩展:用于安全地连接和操作SQL数据库,提供预处理语句,防止SQL注入攻击。 4. 错误处理和日志记录:使用try-catch机制捕获异常,记录错误日志,便于问题排查。 答辩PPT通常会涵盖...

    php数据库操作model类(使用__call方法)

    不过,值得注意的是,这个实现没有包含错误处理和预处理语句,这在实际生产环境中是必要的,因为它们能防止SQL注入攻击并提高代码的安全性。 此外,为了使代码更具可扩展性和可维护性,通常会将数据库连接配置(如...

    PHP.zip_PHP数据

    用户输入的数据应进行验证和清理,以防止SQL注入等安全问题。 4. **插入和查询数据**: 在接收到用户提交的信息后,PHP会使用INSERT INTO语句将数据插入到数据库。对于展示留言,PHP会执行SELECT语句从数据库获取...

    PHP模型Model类封装数据库操作示例

    使用mysqli类提供的预处理语句可以有效防止SQL注入攻击。此外,为了提高代码的健壮性和可读性,合理的错误处理和日志记录也是必不可少的。 本文的示例通过封装成一个通用的Model类,使得在不同的业务逻辑中可以轻松...

    php项目,花店,带数据库,带源码,可执行!使用sql2000

    8. 安全性:理解如何防止SQL注入、XSS攻击等常见Web安全威胁,以及如何正确处理用户输入。 “压缩包子文件的文件名称列表:花店”可能代表压缩包内包含的是整个花店项目的所有文件,可能包括PHP源代码、数据库脚本...

    基于PHP企业门户网站(包括后台管理系统)(前后端源码+SQL).zip

    源码中可能涉及到防止SQL注入、XSS攻击的措施,如预编译语句、参数绑定、输入验证等。理解这些安全机制有助于保护系统不受攻击。 6. **权限管理**:后台管理系统通常包含角色和权限管理,以控制不同用户对资源的...

Global site tag (gtag.js) - Google Analytics