thinkphp 操作數據庫有三個類:Db.class.php,DbMysql.class.php,Model.class.php
1.控制器中實例化數據庫模型
2.調用數據庫模型類中的方法(拿方法add來示例)
3.數據庫模型類中方法調用DbMysql.class.php 類中的方法,但實際上DbMysql.class.php 繼承了Db.class.php
實例化模型類就操作了很多操作,比如連接數據庫.
$user=M('User');
$user->data($data)->add();
就這兩步過程具體是怎么在執行呢?
一:在model中構造函數,執行了如下的操作
獲取數據庫模型的名稱,獲取數據庫的相關信息,如表名,表前綴,最后再調用model里面的db方法操作數據庫的連接
二:默認此時已經連接了數據庫,那么add()這個方法具體做了些什么事情?
add($data='',$options=array(),$replace=false){}
它做了三件事情:
1.分析add方法里面是否傳遞了參數
(1).如果$data為空,獲取當前對象的值,即data()方法返回的值
(2).如果為空報錯
(3).將對象返回的值在賦給變量$data,賦給_facade($data)被它處理
2.分析表達式:(實際上就是獲取數據庫表表名,模型的信息,where條件,limit等來為拼湊sql語句作準備)
(1).獲取表名,模型名(_parseOptions()該函數獲取所有數據庫操作的信息存入數組)
(2).拼湊sql:parseSql(),parseLock(),在Db.class.php中
通過獲取的數據庫sql相關信息,如where,limit,通過parsesql()函數處理替換SELECT%DISTINCT% %FIELD% FROM %TABLE%%JOIN%%WHERE%%GROUP%%HAVING%%ORDER%%LIMIT% %UNION%這個語句.
最后就變成了類似:SELECT * FROM `think_fenzhu` WHERE id=33 LIMIT 1
3.數據處理
4.執行插入操作(返回插入的id值)
執行插入理解:$this->db->add(); 調用Db.class.php 中的insert()方法
這是個人的片段理解,如有問題,請大牛諒解.
新聞熱點
疑難解答
圖片精選