<?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注入漏洞。这个漏洞出现在PHP代码处理用户输入不当时,导致攻击者能够利用它执行恶意的SQL命令。 首先,我们来看一下问题的关键部分。`array_walk`...
4. **安全性**:在PHP与SQL交互时,需要防止SQL注入攻击,即恶意用户通过输入特殊构造的SQL语句来操纵数据库。使用预处理语句或参数化查询可以有效避免这类问题。 5. **Web交互**:购物系统通常采用MVC(Model-View...
但即使是成熟的框架也可能存在安全漏洞,例如文件ThinkPHP/Lib/Core/Model.class.php中的SQL注入漏洞就是一个例子,它发生在ThinkPHP3.1.3及更早的版本中。 SQL注入是一种常见的网络攻击手段,攻击者通过在数据库...
在OneThink中,SQL注入是一种常见的安全风险,主要是由于不当处理用户输入数据导致的。在描述中提到的场景中,攻击者通过审计和尝试,找到了一个利用前台注入进入后台的方法。具体来说,这个过程涉及到了模型(Model)...
《ThinkPHP v3.2.X 反序列化漏洞与SQL注入及文件读取利用分析》 ThinkPHP是一款广泛使用的PHP框架,其3.2.*版本存在反序列化漏洞,允许攻击者通过精心构造的数据包触发特定行为,如SQL注入和文件读取。本文将深入...
7. 安全性:了解如何防止SQL注入、XSS攻击等安全问题,使用预编译语句、参数绑定等方式提高代码安全性。 8. 错误处理和调试:学习PHP的错误报告机制,以及如何编写健壮的代码来处理可能出现的异常情况。 9. MVC...
7. **安全性**:了解如何防止SQL注入攻击,使用预编译语句和参数化查询,以及设置合适的数据库权限,确保系统的安全性。 8. **Web应用架构**:探讨如何设计和实现一个基于PHP和SQL Server 2000的Web应用架构,包括...
同时,对读取的数据进行转义或预处理,防止SQL注入攻击。 8. **错误处理**:程序应当包含适当的错误处理机制,比如文件不存在、格式不正确、数据无法转换等,确保系统稳定运行。 9. **性能优化**:当Excel文件较大...
4. **安全性**:由于在描述中提到了"安全",所以这些PHP文件可能会包含预防SQL注入、XSS攻击等安全措施。比如使用预处理语句、过滤用户输入、设置合适的权限等。 5. **文件上传**:"文件大小限制解除"可能意味着有...
这个简单的Model类虽然提供了基本的数据库操作功能,但在实际项目中可能需要扩展以适应更复杂的需求,例如错误处理、事务管理、预处理语句以防止SQL注入等。此外,随着项目规模的增长,可能需要考虑使用ORM(对象...
书中会涉及如何防止SQL注入、跨站脚本攻击(XSS)和其他常见的网络安全威胁,并提供相应的预防措施。 7. 错误处理与调试:书中将指导读者如何有效地处理程序错误,调试PHP代码,以及优化SQL查询性能。 8. 实战项目...
6. **预处理语句**:为了防止SQL注入,`Plan_model`可能会使用预处理语句来构建和执行SQL命令。 描述中的“hello io want to move this file to decode”看起来像是一个拼写错误或者不完整的句子,可能意味着用户想...
在实际的网站开发中,还需要考虑安全性问题,如防止SQL注入,这可以通过预处理语句或者使用PDO(PHP Data Objects)扩展来实现。另外,为了优化性能,需要了解索引的创建和使用,以及适当的数据库设计原则。 对于...
开发者需要了解如何设计高效的数据库结构和编写安全的SQL查询,以防止SQL注入攻击。 3. 安全性实现:考勤系统涉及到员工的个人信息和出勤记录,因此安全性至关重要。这里包括密码哈希存储、输入验证、防止XSS攻击...
3. PHP的PDO(PHP Data Objects)扩展:用于安全地连接和操作SQL数据库,提供预处理语句,防止SQL注入攻击。 4. 错误处理和日志记录:使用try-catch机制捕获异常,记录错误日志,便于问题排查。 答辩PPT通常会涵盖...
不过,值得注意的是,这个实现没有包含错误处理和预处理语句,这在实际生产环境中是必要的,因为它们能防止SQL注入攻击并提高代码的安全性。 此外,为了使代码更具可扩展性和可维护性,通常会将数据库连接配置(如...
用户输入的数据应进行验证和清理,以防止SQL注入等安全问题。 4. **插入和查询数据**: 在接收到用户提交的信息后,PHP会使用INSERT INTO语句将数据插入到数据库。对于展示留言,PHP会执行SELECT语句从数据库获取...
使用mysqli类提供的预处理语句可以有效防止SQL注入攻击。此外,为了提高代码的健壮性和可读性,合理的错误处理和日志记录也是必不可少的。 本文的示例通过封装成一个通用的Model类,使得在不同的业务逻辑中可以轻松...
8. 安全性:理解如何防止SQL注入、XSS攻击等常见Web安全威胁,以及如何正确处理用户输入。 “压缩包子文件的文件名称列表:花店”可能代表压缩包内包含的是整个花店项目的所有文件,可能包括PHP源代码、数据库脚本...
源码中可能涉及到防止SQL注入、XSS攻击的措施,如预编译语句、参数绑定、输入验证等。理解这些安全机制有助于保护系统不受攻击。 6. **权限管理**:后台管理系统通常包含角色和权限管理,以控制不同用户对资源的...