php model类

manbudezhu 发布于 2016/07/05 10:20
阅读 279
收藏 0
PHP

按照教程写的Model类,不传参数时,直接读取$_post进行增加,修改.很方便,都不用组合参数.不知道安全性存在哪些问题.其次想把这个改成pdo预处理的方式,初步设想是修改一下myquery()和myexec()这两个方法应该就行了吧,哪位能帮忙实现一下.

<?php 
namespace PlatPhp\Tool{
//引入系统pdo
use Pdo;
class Model{
//建立一个静态变量
private static $link=null;
// 表格
protected $table=null;
//opt属性
protected $opt=array();
//构造函数,实例化pdo对象
public function __construct($table=null){
// 初始化工作表
$this->table=!is_null($table)?C('TABLE_PREFIX').$table:(is_null($this->table)?C('TABLE_PREFIX').C('TABLE_NAME'):C('TABLE_PREFIX').$this->table);
try {
$dsn='mysql:host='.C('DB_HOST').';dbname='.C('DB_NAME');
self::$link=new Pdo($dsn,C('DB_USER'),C('DB_PWD'));
//设置字符编码
self::$link->query('set names '.C('DB_CHARSET'));
//设置异常模式
self::$link->setAttribute(PDO::
ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); 
// 调用opt函数初始化;
$this->opt();
} catch (PDOException $e) {
$e->getMessage();
}


}
//定义myquery方法
public function myquery($sql){
echo $sql;
//将执行结果返回给结果集
$result=self::$link->query($sql);
//取出结果集赋值给数组
$rows=$result->fetchAll(PDO::FETCH_ASSOC);
return $rows;
}
//定义opt方法,设置sql元素初始值
public function opt(){
$this->opt=array(
'select'=>'*',
'where'=>'',
'order'=>'',
'group'=>'',
'having'=>'',
'limit'=>'',
);
}
//定义all方法
public function all(){
//组合sql语句
$sql="select ".$this->opt['select'].' from '.$this->table.$this->opt['where'].$this->opt['group'].$this->opt['having'].$this->opt['order'].$this->opt['limit'];
//将组合好的$sql语句作为参数传递调用myquery方法
return $this->myquery($sql);
}
// 定义链式操作field函数
public function field($sql='*'){
$this->opt['select']=$sql;
return $this;
}
//定义链式操作where函数
public function where($sql=null){
if(!is_null($sql)){
$this->opt['where']=' where '.$sql;
}

// 链式操作,返回当前的对象
return $this;
}
//定义order函数
public function order($sql=null){
if(!is_null($sql)){
$this->opt['order']=' order by '.$sql;
}
return $this;
}
//定义limit 函数
public function limit($sql=null){
if(!is_null($sql)){
$this->opt['limit']=' limit '.$sql;
}
return $this;
}
//定义find 方法,只查询一条数据
public function find(){
$f=$this->limit(1)->all();
return $f[0]; 
}
//定义find 的别名函数one
public function one(){
return $this->find();
}
//定义没有返回结果集的函数myexec
public function myexec($sql){
echo $sql;
$rows=self::$link->exec($sql);
return $rows;
}
// 数据过滤函数
private function _safe_str($str){
// 判断自动转义是否开启,如未开启,则进行转义
if(!get_magic_quotes_gpc()){
$str=addslashes($str);
}
return $str;
}
//定义增加函数add
public function add($str=null){
//参数两种来源,1.参数直接传递.2post提交结果.键值对应字段名,键值对应数据库的值.
$str=is_null($str)?$_POST:$str;

$k='';
$v='';
// 使用foreach进行循环
foreach ($str as $key => $value) {
// echo 'key:'.$key.'<br>';
$k.='`'.$this->_safe_str($key).'`,';
// echo 'value:'.$value.'<br>';
$v.="'".$this->_safe_str($value)."',";
}
//去除末尾的,号
$k=rtrim($k,',');
$v=rtrim($v,',');
// 组合$sql语句
if(!$k==''&&!$v==''){
$sql='insert into '.$this->table.'('.$k.') values ('.$v.')';
// echo $sql;
return $this->myexec($sql);
}
}
//定义修改函数edit
public function edit($data=null){
// update arc set title='我爱我的祖国',cid=2 where aid=4;

//判断必须有where语句
if(empty($this->opt['where'])) halt('编辑操作必须有where语句');
if(empty($_POST)) return;
// 如果data为null,怎没有传递参数,取$_POST的值.
$data=is_null($data)?$_POST:$data;
$sql='';
foreach ($data as $k => $v) {
$sql.='`'.$this->_safe_str($k).'`="'.$this->_safe_str($v).'",';
}
$sql=rtrim($sql,',');
$sql='update '.$this->table.' set '.$sql.$this->opt['where'];
$rows=$this->myexec($sql);
p($rows);
if($rows){
echo "成功更新了{$rows}条记录";
}
return $rows;
}
//定义删除函数
public function del(){
//组合$sql语句
//需要判断$opt['where']是否为空
if(!empty($this->opt['where'])){
$sql="delete from ".$this->table.$this->opt['where'];
echo $sql;
$rows=$this->myexec($sql);
}else{
echo '删除操作必须绑定where语句';
}
return $rows;
 
}
}




}






//namespace












 ?>



 

加载中
返回顶部
顶部