yaf框架封装简单的pdo类

yaf框架封装简单的pdo类
<?php
/**

  • Created by PhpStorm.
  • User: Administrator
  • Date: 2017/7/24
  • Time: 14:03
    */
    /*
     
    数据库PDO操作
     */
    class DAO {
    private function Link(){
    $config=Yaf_Application::app()->getConfig();
    try{
    $PDO=new PDO($config['mysql']['dsn'],$config['mysql']['user'],$config['mysql']['pass']);
    $PDO->query("set names utf8"); //数据库utf8
    //关闭自动提交
    $PDO->setAttribute(PDO::ATTR_AUTOCOMMIT,0);
    return $PDO;
    }
    catch (Exception $e){
    echo $e->getMessage();
    }
    }
    //查询单条数据
    public function quOne($sql,$term=''){
    $PDO=$this->Link();
    try{
    $stmt = $PDO->prepare($sql);
    if(!empty($term)){
    foreach ($term as $key=>$value){
    $stmt->bindParam($key, $term[$key], PDO::PARAM_STR);
    }
    }
    $stmt->execute();
    // $PDO->commit();
    return $stmt->fetch(PDO::FETCH_ASSOC);
    } // if there is a problem we can handle it here
    catch (Exception $e) {
    echo $e->getMessage();
    }
    }
    //查询所有数据
    public function quAll($sql,$term=''){
    $PDO=$this->Link();
    try{
    $stmt = $PDO->prepare($sql);
    if(!empty($term)) {
    foreach ($term as $key => $value) {
    $stmt->bindParam($key, $term[$key], PDO::PARAM_STR);
    }
    }
    $stmt->execute();
    // $PDO->commit();
    return $stmt->fetchAll(PDO::FETCH_ASSOC);
    } // if there is a problem we can handle it here
    catch (Exception $e) {
    echo $e->getMessage();
    }
    }
    //插入单条数据
    //$name 为表名
    //$data添加的数据为一个数组
    public function inOne($name,$data,$id="",$statc=true){
    if(!$statc){
    return false;
    }
    if(!is_array($data)){
    return false;
    }
    $PDO=$this->Link();
    foreach ($data as $key=>$value){
    $keys[]=$key;
    $values[]="'".$value."'";
    }
    $sql="insert into ".$name." (";
    $sql.=implode(",",$keys);
    $sql.=",_str";
    $sql.=") values (";
    $sql.=implode(",",$values);
    $_str=time().$this->getrandstr();
    $sql.=",'$_str'";
    $sql.=" )";
    try{
    $PDO->beginTransaction();
    $stmt = $PDO->prepare($sql);
    $state=$stmt->execute();
    if(empty($state)){
    return false;
    }
    if(empty($id)){
    $PDO->commit();
    return true;
    }
    $insql="select $id from $name where _str = '$_str'";
    $InsertId = $PDO->prepare($insql);
    $InsertId->execute();
    $PDO->commit();
    return $InsertId->fetch(PDO::FETCH_ASSOC);
    } // if there is a problem we can handle it here
    catch (Exception $e) {
    $PDO->rollBack();
    return false;
    }
    }
    //插入多条语句
    public function inAll($name,$data,$id="",$statc=true){
    if(!$statc){
    return false;
    }
    if(!is_array($data)){
    return false;
    }
    $PDO=$this->Link();
    $valueStr='';
    $i=0;
    foreach ($data as $key=>$value){
    $i++;
    if(!is_array($value)){
    return false;
    }
    $values=array();
    $keys=array();
    $valueStr.="(";
    foreach ($value as $k=>$v){
    $values[]=$value[$k];
    $keys[]=$k;
    }
    $_str=time().$this->getrandstr();
    $_strs[]=$_str;
    $keys[]="_str";
    $values[]="'$_str'";
    $valueStr.=implode(",",$values).")";
    if(count($data)==$i){
    $valueStr .= "";
    }else{
    $valueStr .= ",";
    }
    }
    $sql="insert into ".$name." (";
    $sql.=implode(",",$keys);
    $sql.=") values ".$valueStr;
    try{
    $PDO->beginTransaction();
    $stmt = $PDO->prepare($sql);
    $stmt->execute();
    if(empty($id)){
    $PDO->commit();
    return true;
    }
    $_strTerm="'".implode("','",$_strs)."'";
    $insql="select $id from $name where _str in ($_strTerm)";
    $InsertId = $PDO->prepare($insql);
    $InsertId->execute();
    $PDO->commit();
    return $InsertId->fetchAll(PDO::FETCH_ASSOC);
    } // if there is a problem we can handle it here
    catch (Exception $e) {
    $PDO->rollBack();
    return false;
    }
    }

    //多表关联插入
    //参数值 term y 是多条语句,不是
    /$table["table"]["a"]["a_id"=>"b_aid"];
    $table["table"]["b"];
    $table["table"]["c"];
    /
    // datas["tablename"][]["data"];
    public function corr($tables='',$datas){
    try{
    $arryKey=[];
    $PDO=$this->Link();
    $PDO->beginTransaction();
    foreach ($tables as $term=>$HasKey){
    $data=$datas[$term];
    //区分$data 是否是多条插入
    if(count($data)==1){
    /生成单条插入语句/
    $keys=null;
    $values=null;
    foreach ($data[0] as $key=>$value){
    if(!empty($arryKey[$key])){
    $keys[]=$key;
    $values[]="'".$arryKey[$key]."'";
    }else{
    $keys[]=$key;
    $values[]="'".$value."'";
    }
    }
    if(is_array($HasKey)){
    $sql="insert into ".$term." (";
    $sql.=implode(",",$keys);
    $sql.=",_str";
    $sql.=") values (";
    $sql.=implode(",",$values);
    $_str=time().$this->getrandstr();
    $sql.=",'$_str'";
    $sql.=" )";
    $state[]= $PDO->exec($sql);
    $idSql="select ".key($HasKey)." from {$term} where _str='$_str'";

                $InsertId=$PDO->prepare($idSql);
                $InsertId->execute();
                $inner=$InsertId->fetch(PDO::FETCH_ASSOC);
                $arryKey[$HasKey[key($HasKey)]]=$inner[key($HasKey)];
                }else{
                $sql="insert into ".$term." (";
                $sql.=implode(",",$keys);
                $sql.=",_str";
                $sql.=") values (";
                $sql.=implode(",",$values);
                $_str=time().$this->getrandstr();
                $sql.=",'$_str'";
                $sql.=" )";
                $state[]=$PDO->exec($sql);
            }
        }else{
            $valueStr='';
            $i=0;
                foreach ($data as $key => $value) {
                    $i++;
                    $values = null;
                    $keys = null;
                    $valueStr .= "(";
                    foreach ($value as $k => $v) {
                        if(!empty($arryKey[$k])){
                            $keys[]=$k;
                            $values[]="'".$arryKey[$k]."'";
                        }else{
                            $keys[]=$k;
                            $values[]="'".$v."'";
                        }
                    }
                    $_str = "'".time() . $this->getrandstr()."'";
                    $_strs[] = $_str;
                    $keys[] = "_str";
                    $values[] = $_str;
                    if(count($data)==$i){
                        $valueStr .= implode(",", $values) . ")";
                    }else{
                        $valueStr .= implode(",", $values) . "),";
                    }
    
                }
                $sql = "insert into " . $term . " (";
                $sql .= implode(",", $keys);
                $sql .= ") values " . $valueStr;
                $state[]=$PDO->exec($sql);
        }
    }

if(in_array(false,$state)){
throw new Exception("已回滚");
}
$PDO->commit();
return $arryKey;
}
catch (Exception $e){
$PDO->rollBack();
return false;
}

}

//删除
public function Del ($sql,$term,$statc=true){
    if(!$statc){
        return false;
    }
    $PDO=$this->Link();
    try{
        $PDO->beginTransaction();
        $stmt = $PDO->prepare($sql);
        if(!empty($term)){
            foreach ($term as $key=>$value){
                $stmt->bindParam($key, $value, PDO::PARAM_STR);
            }
        }
        $stmt->execute();
        $PDO->commit();
        return true;
    }  // if there is a problem we can handle it here
    catch (Exception $e) {
        $PDO->rollBack();
       return false;
    }
}
//修改
public function Update ($sql,$statc=true){
    if(!$statc){
        return false;
    }
    $PDO=$this->Link();
    try{
        $PDO->beginTransaction();
        $stmt = $PDO->prepare($sql);
        if(!empty($term)){
            foreach ($term as $key=>$value){
                $stmt->bindParam($key, $term[$key], PDO::PARAM_STR);
            }
        }
        $result=$stmt->execute();
        $PDO->commit();
        if($result){
            return true;
        }else{
            return false;
        }
    }  // if there is a problem we can handle it here
    catch (Exception $e) {
        $PDO->rollBack();
        return false;
    }
}
//获取随机字符

private function getrandstr(){
$str='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890';
$randStr = str_shuffle($str);//打乱字符串
$rands= substr($randStr,0,6);//substr(string,start,length);返回字符串的一部分
return $rands;
}
}

转载于:https://blog.51cto.com/13346331/2133017

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
自主封装的PHP ORM框架,面向对象的PDO数据库操作,API框架,支持Get/Post/Put/Delete多种请求方式。 代码示例: <?php use Models\User; require '../application.php'; require '../loader-api.php'; //适合查询,如:获取用户列表或者单个用户信息 execute_request(HttpRequestMethod::Get, function() { $action = request_action(); //判断是否存在 if ($action == 1) { list($type, $value) = filter_request(array( request_int('type', 1, 2, 3), //1.用户名 2.邮箱 3.手机号 request_string('value'))); $type_field_map = array( 1 => User::$field_username, 2 => User::$field_email, 3 => User::$field_phone ); if ($type == 2 && !is_email($value) || $type == 3 && !is_mobilephone($value)) { die_error(USER_ERROR, $type_field_map[$type]['name'] . '格式无效'); } $user = new User(); $user->set_where_and($type_field_map[$type], SqlOperator::Equals, $value); $result = $user->exists(create_pdo()); echo_result($result ? 1 : 0); //存在返回1,不存在返回0 } //查询单条信息 if ($action == 2) { list($userid) = filter_request(array( request_userid())); //查询单条数据 $user = new User($userid); //set_query_fields可以指定查询字段,下面两种写法均可 //$user->set_query_fields('userid, username, email'); //$user->set_query_fields(array(User::$field_userid, User::$field_username, User::$field_email)); //还可设置where条件进行查询 //$user->set_where_and(User::$field_status, SqlOperator::Equals, 3); //$user->set_where_and(User::$field_truename, SqlOperator::IsNullOrEmpty); //$user->set_where_and(User::$field_age, SqlOperator::In, array(27, 29)); //$user->set_where_and(User::$field_regtime, SqlOperator::LessThan, '-6 month'); //创建数据库连接 $db = create_pdo(); $result = $user->load($db, $user); //也可以用Model的静态方法 //$result = Model::load_model($db, $user, $user); if (!$result[0]) die_error(PDO_ERROR_CODE, '获取用户信息时数据库错误'); if (!$user) di
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值