资讯专栏INFORMATION COLUMN

php封装db 类连接sqlite3

alin / 1614人阅读

摘要:最新插入的支持数据库移植如果你的部署将来有多种数据库那就用它了同时是设计的执行效率较高他已经封装为的扩展库组件了运行快效率高这是修改为版本的原生类导入的配置文件我这里只是方便前端修改,也可以搞成文件

init();
                return;
            }
            $this->db = new SQLite3("./db.php");
        }
        function init(){
            $this->db = new SQLite3("./db.php");
            // TODO:
        }

        function changes(){
            return $this->db->changes();
        }

        function query($sql,$param=null,$memb=null){
            $stmt=$this->db->prepare($sql);
            if(!$stmt)
                return false;
            if($param){
                if(is_array($param)){
                    for($i=0;$ibindValue($i+1,$param[$i]);
                }else{
                    $stmt->bindValue(1,$param);
                }
            }
            $rs=$stmt->execute();
            if(!$rs){
                $stmt->close();
                return false;
            }
            $arr=$rs->fetchArray(SQLITE3_NUM);
            $rs->finalize();
            $stmt->close();
            if(!$arr)
                return null;
            if(!$memb)
                return $arr;
            $res=array();
            for($i=0;$idb->prepare($sql);
            if(!$stmt)
                return false;
            if($param){
                if(is_array($param)){
                    for($i=0;$ibindValue($i+1,$param[$i]);
                }else{
                    $stmt->bindValue(1,$param);
                }
            }
            $rs=$stmt->execute();
            if(!$rs){
                $stmt->close();
                return false;
            }
            
            $res=array();
            while($arr=$rs->fetchArray(SQLITE3_NUM)){
                if(!$memb) {
                    $res[]=$arr;
                    continue;
                }
                if(count($memb)==1 && $memb[0]==null){
                    $res[]=$arr[0];
                    continue;
                }
                $it=array();
                for($i=0;$ifinalize();
            $stmt->close();
            
            return $res;
        }

        function querySingle($sql,$param=null){
            $res=$this->query($sql,$param);
            if(!$res)
                return false;
            return $res[0];
        }
        
        function querySingleAll($sql,$param=null){
            $stmt=$this->db->prepare($sql);
            if(!$stmt)
                return false;
            if($param){
                if(is_array($param)){
                    for($i=0;$ibindValue($i+1,$param[$i]);
                }else{
                    $stmt->bindValue(1,$param);
                }
            }
            $rs=$stmt->execute();
            if(!$rs){
                $stmt->close();
                return false;
            }
            
            $res=array();
            while($arr=$rs->fetchArray(SQLITE3_NUM)){
                $res[]=$arr[0];
            }
            $rs->finalize();
            $stmt->close();
            
            return $res;
        }

        function exec($sql,$param=null){
            $stmt=$this->db->prepare($sql);
            if(!$stmt)
                return false;
            if($param){
                if(is_array($param)){
                    for($i=0;$ibindValue($i+1,$param[$i]);
                }else{
                    $stmt->bindValue(1,$param);
                }
            }
            $rs=$stmt->execute();
            if($rs) {
                $res=true;
                $rs->finalize();
            }else{
                $res=false;
            }
            $stmt->close();
            return $res;
        }
        
        function begin(){
            return $this->exec("BEGIN");
        }
        function rollback(){
            return $this->exec("ROLLBACK");
        }
        function commit(){
            return $this->exec("COMMIT");
        }
        
        function escapeString($s){
            return $this->db->escapeString($s);
        }
        //最新插入的id
        function lastInsertRowID(){
            return $this->db->lastInsertRowID();
        }
        
        function lastErrorMsg (){
            return $this->db->lastErrorMsg();
        }
    }
?>

PDO支持数据库移植,如果你的部署将来有多种数据库,那就用它了.同时,PDO是C设计的,执行效率较高.他已经封装为PHP的扩展库组件了.运行快,效率高

class dbManager{
    
    function __construct($config) {
        $text = file_get_contents($config);
        $obj = json_decode($text);
        $this->db= new PDO($obj -> dsn, $obj -> user, $obj -> pass);
    }
    
    private function bind_param($stmt,&$param){
        if ($param || $param===0) {
            if (is_array($param)) {
                for ($i = 0; $i < count($param); $i++)
                    $stmt -> bindParam($i + 1, $param[$i]);
            } else {
                $stmt -> bindParam(1, $param);
            }
        }
    }
    
    function exec($sql, $param = null) {
        $stmt = $this -> db -> prepare($sql);
        if (!$stmt){
            var_dump($this->db->errorinfo());
            return false;
        }
        $this->bind_param($stmt,$param);
        $res = $stmt -> execute();
        if($res){
            $res=$stmt->rowCount();
        }
        $stmt -> closeCursor();
        return $res;
    }
    
    function query($sql,$param=null,$name=true){
        $stmt = $this -> db -> prepare($sql);
        if (!$stmt){
            return null;
        }
        $this->bind_param($stmt,$param);
        $res = $stmt -> execute();
        if(!$res){
            $stmt->closeCursor();
            return null;
        }
        $arr=$stmt->fetch($name?PDO::FETCH_ASSOC:PDO::FETCH_NUM);
        $stmt -> closeCursor();
        return $arr;
    }
    
    function queryAll($sql,$param=null,$name=true){
        $stmt = $this -> db -> prepare($sql);
        if (!$stmt){
            return null;
        }
        $this->bind_param($stmt,$param);
        $res = $stmt -> execute();
        if(!$res){
            $stmt->closeCursor();
            return null;
        }
        $arr=$stmt->fetchAll($name?PDO::FETCH_ASSOC:PDO::FETCH_NUM);
        $stmt -> closeCursor();
        return $arr;
    }
    
    function querySingle($sql,$param=null,$name=true){
        $stmt = $this -> db -> prepare($sql);
        if (!$stmt){
            return null;
        }
        $this->bind_param($stmt,$param);
        $res = $stmt -> execute();
        if(!$res){
            $stmt->closeCursor();
            return null;
        }
        $arr=$stmt->fetchColumn();
        $stmt -> closeCursor();
        return $arr;
    }
    
    function querySingleAll($sql,$param=null,$name=true){
        $stmt = $this -> db -> prepare($sql);
        if (!$stmt){
            return null;
        }
        $this->bind_param($stmt,$param);
        $res = $stmt -> execute();
        if(!$res){
            $stmt->closeCursor();
            return null;
        }
        $arr=[];
        do{
            $item=$stmt->fetchColumn();
            if($item)
                $arr[]=$item;
        }while($item!==false);
        $stmt -> closeCursor();
        return $arr;
    }

    public function begin() {
        $this -> db -> beginTransaction();
    }

    public function rollback() {
        $this -> db -> rollBack();
    }

    public function commit() {
        $this -> db -> commit();
    }
}

/*
$db=new dbManager("db.json");
$db->exec("CREATE TABLE USER(ID INTEGER PRIMARY KEY NOT NULL)");
$db->exec("INSERT INTO user(ID) VALUES(?)",1);
var_dump($db->query("SELECT * FROM USER WHERE ID=?",1));
var_dump($db->queryAll("SELECT * FROM USER WHERE ID=?",1));
var_dump($db->querySingle("SELECT * FROM USER WHERE ID=?",1));
var_dump($db->querySingleAll("SELECT * FROM USER WHERE ID=?",1));
*/

?>

这是修改为pdo版本的原生db类
导入的json配置文件
{

"dsn":"sqlite:test.db",
"user":"",
"pass":""

}
我这里只是方便前端修改,也可以搞成php文件

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/26220.html

相关文章

  • php封装db 连接sqlite3

    摘要:最新插入的支持数据库移植如果你的部署将来有多种数据库那就用它了同时是设计的执行效率较高他已经封装为的扩展库组件了运行快效率高这是修改为版本的原生类导入的配置文件我这里只是方便前端修改,也可以搞成文件 PDO支持数据库移植,如果你的部署将来有多种数据库,那就用它了.同时,PDO是C设计的,执行效率较高.他已经封装为PHP的扩展库组件了.运行快,效率高 class dbManager{ ...

    scq000 评论0 收藏0
  • IOS开发之sqlite封装

    摘要:下面将做一个简单的学生表单本地查询数据的界面,输入学生姓名可以查出相匹配的数据,本示例将对进行工具类封装,对学生进行模型数据封装注学生表包含学生,姓名,年龄三个字段。所以,以后的项目中可以使用框架,也可以自己进行封装工具类操作数据。 上一节实现了最基本的增删改查,所有操作数据库的方法都写在控制器里,这样会有一个问题,如果修改CURD(增删改查)操作方法会非常麻烦,这一节我们对CURD进...

    Achilles 评论0 收藏0
  • IOS开发之sqlite封装

    摘要:下面将做一个简单的学生表单本地查询数据的界面,输入学生姓名可以查出相匹配的数据,本示例将对进行工具类封装,对学生进行模型数据封装注学生表包含学生,姓名,年龄三个字段。所以,以后的项目中可以使用框架,也可以自己进行封装工具类操作数据。 上一节实现了最基本的增删改查,所有操作数据库的方法都写在控制器里,这样会有一个问题,如果修改CURD(增删改查)操作方法会非常麻烦,这一节我们对CURD进...

    hankkin 评论0 收藏0
  • C - SQLite之C接口

    摘要:回调函数,若该函数非空,则每次语法的结果都会调用该函数,若为空,则将被忽略。回调函数的第一个参数。存储错误信息,可为返回非零,该函数立即中断查询,并不再执行后续的语句和回调函数返回结束执行。 SQLite之C接口 sqlite之C接口简介 sqlite3_open int sqlite3_open ( const char *filename, /* Database fil...

    xiaotianyi 评论0 收藏0
  • Golang数据库编程之GORM库入门

    摘要:在上一篇文章中我们讲解了使用语言的标准库包操作数据库的过程,虽然使用包操作数据也是挺方便的,但是需要自己写每一条语句,因此我们可能会自己再度进行封装,以便更好地使用,而使用现有语言开源框架则是代替自己封装的一个更好的方式。在上一篇文章中我们讲解了使用Go语言的标准库sql/database包操作数据库的过程,虽然使用sql/database包操作数据也是挺方便的,但是需要自己写每一条SQL语...

    番茄西红柿 评论0 收藏0

发表评论

0条评论

alin

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<