万能写⼊sql语句,并且防注⼊
通过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);
增加字段的sql语句
$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 $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 '⾮法字段';
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。