天天看點

《TP5.0學習筆記---對Mysql資料庫的操作(二)》

聲明:本篇部落格所使用的資料庫及表還是上篇部落格中的資料庫和表(http://blog.csdn.net/self_realian/article/details/78560456)

一、 資料庫添加操作

在上一篇部落格中,我們通過Db類中的query()和execute()方法,使用SQL語句的方式向資料庫中添加的資料。下邊我們學習一下它的其它插入方式:

$db = Db::name('user');
        //1,insert()方法,傳回值是影響記錄的行數,也就是插入數
        $res = $db->insert([
            'email'     => '[email protected]',
            'password'  => md5('shulv_01'),
            'username'  => 'shulv_01'
        ]);
        dump($res);
           
《TP5.0學習筆記---對Mysql資料庫的操作(二)》

因為在我們的程式設計過程中,一般都是幾個庫表互相關聯的,我們在插入之後需要擷取它的自增長id,如果我們使用insert()方法,我們無法擷取自增的id,我們可能需要更多的操作才能得到。那麼,thinkphp的Db類為我們提供了insertGetId()方法

//insertGetId()傳回自增id
$res = $db->insertGetId([
            'email'     => '[email protected]',
            'password'  => md5('shulv_02'),
            'username'  => 'shulv_02'
        ]);
        dump($res);
           

我重新整理了兩次,是以顯示結果如下:

《TP5.0學習筆記---對Mysql資料庫的操作(二)》

那麼,當我們需要插入多條記錄時,我們可以通過下邊這個方法

//insertAll()傳回的也是插入成功記錄的條數
$db = Db::name('user');

        $data = [];
        for($i=; $i<; $i++){
            $data[] = [
                'email'    => "shulv_03_{$i}@qq.com",
                'password' => md5("shulv_03_{$i}"),
                'username' => "shulv_03_{$i}"
            ];
        }
        $res = $db->insertAll($data);
        dump($res);
           
《TP5.0學習筆記---對Mysql資料庫的操作(二)》

二、 資料庫更新操作

在更新記錄之前,我先将原來的記錄清空了,然後重新插入30條記錄(還是使用insertAll()方法)

$db = Db::name('user');

       //update() 在使用這個函數的時候我們必須傳遞where條件,否則會報錯。如果我們想更新全部,我們可以給where條件傳遞類似1=1的恒等條件
        $res = $db->where([
            'id'        => 
        ])->update([
            'username'  => '3404767031'//下邊還可以繼續添加更新的字段
            //'email'   => '[email protected]'
        ]);
        dump($res);
           
《TP5.0學習筆記---對Mysql資料庫的操作(二)》

如果我們僅想對表的某一個字段進行更新,我們就可以使用setField()方法

//setField()   僅對表中的某一個字段進行修改  傳回結果也是受影響記錄的行數
        $res = $db -> where([
            'id'   => 
        ]) -> setField('username', '3404767031');
        dump($res);
           
《TP5.0學習筆記---對Mysql資料庫的操作(二)》

它和update()的差別就是,它每次隻更新一個字段,而uodate()可以更新一個字段,也可以更新多個字段

為了說下邊一個setInc()函數,我給表添加了一個num字段,類型為整形無符号

//setInc()  傳回值仍然是受影響條數
        $res = $db -> where([
            'id'   => 
        ]) -> setInc('num', );//如果我們隻傳遞字段名,那麼每重新整理一次,該記錄的該字段都會自增1。如果傳遞第二個參數,那麼每次都會增加你傳遞的第二個參數
        dump($res);
           

下邊還有一個setDec(),它與setInc()用法相同,效果相反,它是自減的。這裡就不再舉例了

三、 資料庫删除操作

記錄的删除,使用的是delete()方法

$db = Db::name('user');

        $res = $db->where([
            'id'   => 
        ])->delete();
        dump($res);
           
《TP5.0學習筆記---對Mysql資料庫的操作(二)》

其實,如果你傳遞的where條件是表中的主鍵,那麼你可以直接這樣寫

$db -> delete(id);
           
$db = Db::name('user');

        $res = $db->delete();
        dump($res);
           
《TP5.0學習筆記---對Mysql資料庫的操作(二)》

當我們沒有傳遞任何參數,也沒有給where條件的時候,執行會報錯,因為一般情況下我們是不會删除所有資料的,如果真的想删除所有,那麼我們可以傳遞給where一個字元串”1=1”

$db = Db::name('user');

        $res = $db->where("1=1")->delete();
        dump($res);
           
《TP5.0學習筆記---對Mysql資料庫的操作(二)》

四、 條件構造器

在前邊說查詢和删除的時候,使用db類,我們都需要傳遞where條件,那我們說一下where條件到底如何來編寫:

之前我們傳遞的where條件,一直是一個數組,db類為我們提供了buildSql()方法,它會傳回我們目前的SQL語句

$sql = $db->where([
            'id' => 
        ])->buildSql();
//當然我們也可以通過傳遞字元串的方式給where傳遞條件,例如:where("id = 1")
        dump($sql);
           
《TP5.0學習筆記---對Mysql資料庫的操作(二)》

如果我們在給where傳遞參數的時候,不想以傳遞一個參數的這種方式時,使用傳遞兩個參數的方式,我們可以将第一個參數傳遞為字段名,第二個為字段的值。 當我們想查詢id不等于1的這條記錄,那麼我們就需要再添加一個參數,第一個參數還是字段名,第二個參數是表達式(<>:不等于 ),第三個參數為我們要判斷的值

$db = Db::name('user');

        /*
            這個條件表達式有哪些(不區分大小寫):
            EQ: =
            NEQ: <>
            LT: <
            ELT: <=
            GT: >
            EGT: >=
            BETWEEN:
            BETWEEN * AND *:
            NOTBETWEEN:
            NOTBETWEEN * AND *:
            IN:
            IN (*,*):
            NOTIN:
            NOTIN (*,*):
        */
        $sql1 = $db->where("id", )->buildSql();
        $sql2 = $db->where("id", "NEQ", )->buildSql();//這裡直接寫<>也是可以的,其餘幾個也是這樣,也可以直接寫符号
        $sql3 = $db->where("id", "between", "1,5")->buildSql();//第三個參數也可以使用數組的方式,[1,5]
        $sql4 = $db->where("id", "in", "1,5,6,7,8")->buildSql();//同樣,第三個參數也可以是數組

        //如果我們還想和以前一樣通過數組的方式,那麼我們可以這樣寫
        $sql5 = $db->where([
            'id'   => ['eq', ]//其他的都可以這樣寫
        ])->buildSql();
        //如果,你想傳遞多個條件,即條件之間是AND的關系,那麼可以接着寫
        $sql6 = $db->where([
            'id'       => ['eq', ],
            'username' => '[email protected]'
        ])->buildSql();

        //如果我們想通過上邊那種字元串的方式傳遞多個條件時,可以寫多個where
        $sql7 = $db
        ->where("id", "not in", [,,,])
        ->where("username", "eq", "3404767031")
        ->buildSql();
        //如果兩個條件是"或"的關系,我們可以使用whereOr();
        $sql8 = $db
        ->where("id", "not in", [,,,])
        ->whereOr("username", "eq", "3404767031")
        ->buildSql();
        dump($sql1);
        dump($sql2);
        dump($sql3);
        dump($sql4);
        dump($sql5);
        dump($sql6);
        dump($sql7);
        dump($sql8);
           
《TP5.0學習筆記---對Mysql資料庫的操作(二)》

如果我們手寫這個SQL語句,将會消耗我們大量的精力,那麼使用這種直接構造sql語句的方式,會節省我們大量的時間和精力

五、 鍊式操作

鍊式操作其實就是執行完db類的一個方法之後,傳回的結果其實還是一個db類,這樣,它就可以連續的調用多個方法。其實這個都是很好了解的

$db = Db::name('user');

        $res = $db
        ->where("id",">",)
        ->field("username","id")//如果我們不想輸出所有字段,我們可以通過該方法指定輸出哪些字段
        ->order("id DESC")//倒序輸出
        ->limit(, )//限制輸出的條數,表示從第三條開始傳回,一共傳回五條
        ->select();
        dump($res);
           
《TP5.0學習筆記---對Mysql資料庫的操作(二)》

如果大家還想了解更多關于鍊式操作的方法,可以參考官方手冊進行了解

希望這些對小夥伴們有所幫助,互相學習,共同進步 ^_^