ホームページ >バックエンド開発 >PHPチュートリアル >PHP アンチ SQL インジェクション データ モデル クラス

PHP アンチ SQL インジェクション データ モデル クラス

巴扎黑
巴扎黑オリジナル
2016-11-11 11:45:491661ブラウズ

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("名前の設定".DB_CHARSET); 
$this->pOb=$pdo; 
}
/*
* 作用:增
* パラメータ:array $arr exp:array('字段名'=>值,'字段名'=>值,....)
* return:int|false
*/
function add($arr){
//拼sql语句
$kArr=array_keys($arr); 
$kStr=join(",",$kArr); 
$vArr=配列値($arr); 

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

$sql = "{$this->tableName}($kStr) の値($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." および "; 
}
}
if(count($arrWhere)>1){
$strW .= " 1=1 "; 
}
}
$sql = "{$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){
true を返します。 
}else {
false を返す; 
}

}
関数 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." および "; 
}
}
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){
true を返します。 

}else{
return false; 
}

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

}else{
$strW .= $kn."=".$kW." および "; 
}
}
if(count($ArrayWhere)>1){
$strW .= " 1=1 "; 
}
}
if(!empty($order)){
$order="「.$order;」で注文します。 
}
if(!empty($limit)){
$limit="limit ".$limit; 
}
//select 字段列表 from 表名 ここで、条件は字段 desc|asc limit start,length によって順序付けされます。 
$sql="{$this->tableName} {$strW} {$order} {$limit} から {$field} を選択します"; 
//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 {
false を返す; 
}

}


}

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。