红穆笔记
首頁 程序筆記 Typecho 對數據庫的增刪改查操作方法 API
程序筆記 Typecho

Typecho 對數據庫的增刪改查操作方法 API

Typecho 对数据库的增删改查操作方法 API

Typecho數據庫提供了非常易用的api,和原生SQL寫法沒有太大的差別,同時也很好地處理了SQL常見的安全問題,如sql注入。

本文從實用角度出發,介紹了typecho操作數據庫的常用場景以及相關api用法。

表創建和刪除

在Typecho插件開發過程中,往往需要創建自己的表。上文提到Typecho_Db類中的query函數,可用於執行所有sql語句,因此我們使用query()來進行表的創建、修改或者刪除。

$db= Typecho_Db::get();
$prefix = $db->getPrefix();
$db->query('create table '.$prefix.'metas xxxxx');

注意,使用query方式創建表的時候,需要在表明前手動添加$prefix前綴,否則在後面的使用過程中會造成困惑。

還可以使用table.來代替$prefix,typecho會自動識別並替換成指定的前綴。

同理,修改或者刪除Typecho數據庫中表,按照同樣的方式調用query即可。

數據查詢

1. select,查詢表數據

select語句是可以說Typecho插件開發中最常用的sql調用。

$db = Typecho_Db::get();
$query= $db->select()->from('table.metas');
$result = $db->fetchAll($query);

說明:

typecho中,.號具有特定的意義,這裏table.metas表示這是一個metas表。實際上,typecho是自動將table.的字符使用str_replace替換成了config.inc.php中設定的前綴。

舉例:
$db->select()->from('table.metas');

將生成SELECT * FROM typecho_metas WHERE (mid = '2' ),其中typecho_是表前綴;

而$db->select()->from('metas');將生成SELECT * FROM metas WHERE (mid = '2' ),注意這裏沒有了表前綴。

指定表字段查詢

有時爲了提高查詢性能,需要指定查詢表中特定的幾個字段,那麼可以使用下面的方式:

$query= $db->select('mid','name')->from('table.metas'); 
echo $query; //SELECT `mid` , `name` FROM typecho_metas

如果聯合查詢中,兩個表存在相同的字段名,那麼可以使用table.來指定表名:

$query = $db->select('table.contents.cid')->from('table.contents')->join....

指定查詢條件

指定SQL查詢的where語句,是最常用的api調用。

$query= $db->select('mid','name')->from('table.metas')->where('mid = ?', 2); 
echo $query; //SELECT * FROM typecho_metas WHERE (`mid` = '2' )

如需要指定多個查詢條件,直接多次調用where即可,將生成and關係的where條件

$db->select('mid','name')->from('table.metas')->where('mid = ?', 2)->where('name like ? ', $name);

使用OR關係的查詢條件

可以使用orWhere()函數來指定SQL查詢的或條件。

$db->select('mid','name')->from('table.metas')->where('mid = ?', 2)->orWhere('mid = ? ', 3);
//SELECT `mid` , `name` FROM typecho_metas WHERE (`mid` = '2' ) OR (`mid` = '3' )

指定查詢範圍

在需要分頁的場景下,分頁是必需的操作。offset()和limit()分別用於指定起始位置和結束位置,即指定查詢範圍。

$query = $db->select('mid','name')->from('table.metas')->offset(2)->limit(3);
echo $query;//SELECT `mid` , `name` FROM typecho_metas LIMIT 3 OFFSET 2

Typecho中,還提供了一種簡寫的方法,見page()函數。

$query = $db->select('mid','name')->from('table.metas')->page(3,10);
echo $query;//SELECT `mid` , `name` FROM typecho_metas LIMIT 10 OFFSET 20
//表示取第三頁,並取10條記錄。

對查詢結果進行排序

在Typecho中,使用order()函數和Typecho_Db::SORT_DESC指定查詢結果的排序方式。

$query = $db->select('mid','name')->from('table.metas')->order('mid',Typecho_Db::SORT_DESC);
echo $query;//SELECT `mid` , `name` FROM typecho_metas ORDER BY `mid` DESC
Tips: Typecho_Db::SORT_ASC 表示升序排序,Typecho_Db::SORT_DESC表示降序排序

聯合查詢

聯合查詢是SQL的常用語法,在Typecho中,同樣使用內置函數join()方便地進行聯合查詢。

$query = $db->select()
    ->from('table.contents')
    ->join('table.comments', 'table.contents.cid = table.comments.cid',Typecho_Db::LEFT_JOIN)
    ->where('table.contents.type = ?', 'post');
echo $query;
//SELECT * FROM typechocontents LEFT JOIN typecho_comments ON typecho_contents.`cid` = typecho_comments.`cid` WHERE (typecho_contents.`type` = 'post' )

update,更新表數據

Typecho中,使用update()函數來進行更新表操作。但注意,update操作,需要藉助於query執行。

$update = $db->update('table.metas')->rows(array('name'=>'case_in_cn'))->where('mid=?',6);
echo $update;//UPDATE typecho_metas SET `name` = 'some_name' WHERE (`mid`='6' )
//執行後,返回收影響的行數。
$updateRows= $db->query($update);

insert,插入數據

Typecho中,使用insert()函數來進行表插入操作。同樣,insert操作需要藉助於query函數。

$insert = $db->insert('table.metas')
    ->rows(array('mid' => '22', 'name' => 'hello world'));
//將構建好的sql執行, 如果你的主鍵id是自增型的還會返回insert id
$insertId = $db->query($insert);

delete,刪除數據

Typecho中使用delete()函數來刪除數據表中的行。delete操作用於刪除數據表中指定的行,同樣需要藉助query函數執行。

$delete = $db->delete('table.metas')
    ->where('mid = ?', 2);
//將構建好的sql執行, 會自動返回已經刪除的記錄數
$deletedRows = $db->query($delete);

數據庫調試

在Typecho調試過程中,打印sql語句往往是很有幫助的。對於大於5.2版本的php,直接echo $query即可,對於小於5.2版本,則需要顯式調用__toString()函數

$select = $db->select()->from('table.metas');
//如果版本大於php5.2
echo $select;
//如果小於php5.2
echo $select->__toString();

微信赞赏

微信

支付宝赞赏

支付寶

✍️ 作者: 紅穆

網站管理員 · 感謝閱讀,更多精彩內容敬請關注

作者主頁 查看主頁 →

相關文章

资源网站typecho001模板

資源網站typecho001模板 程序筆記 Typecho

typecho001模板板本請勿修改本模板文件夾名稱 文件夾名稱爲:typecho001 1.4修復文章頁面js輸出問題1.3修復未安裝插件時的報錯提示優化列表頁代碼輸出1.2修復評論功能增加自定義首頁標題1.1修復評論回覆不對稱功能添加首頁單獨的標題設置功能增加網站favicon.ico圖標增加一…
👁 198
typecho分页样式的修改

typecho分頁樣式的修改 程序筆記 Typecho

大人,時代變了!目前typecho最完美的解決方案了,因爲百度只能看到固定思維的代碼。實際生成的html代碼,乾淨到讓人窒息完全的自定義,包括給li元素加上class,給a元素加上class,給上一頁下一頁加上class,去除typecho自帶用於表示更多的li標籤。甚至裏面的內容我也能添加一些文字…
👁 516
typecho文章页评论样式修改

typecho文章頁評論樣式修改 程序筆記 Typecho

需求使用 typecho 進行模板開發的時候,默認評論樣式很難看。因此需要評論需要重新輸出或進行樣式設定。默認的評論模板文件路徑是:comments.php主要使用的相關變量<?php $comments->gravatar('40', ''); ?> //頭像,有兩個參數,大小、…
👁 387
Typecho调用热门评论文章和调用最新文章的方法总结

Typecho調用熱門評論文章和調用最新文章的方法總結 程序筆記 Typecho

Typecho文章調用Typecho程序在設計主題的時候,側欄有些時候需要調用熱評文章或者最新文章。我們可以在指定的位置通過腳本直接調用。在這篇文章整理這個調用文章的方法,以後在有需要的模板中可以直接調用使用。其實設計主題就那麼回事,靜態模板搞定後,就是直接調用。最新文章調用 <?php $t…
👁 295
Typecho 调用分类文章列表

Typecho 調用分類文章列表 程序筆記 Typecho

其中pageSize後面的數字表示調用文章的數量;mid後面的數字表示調用的分類ID;提示:Typecho分類目錄ID的獲取方法是把鼠標移到某分類名稱上面,在瀏覽器狀態欄顯示的mid=後面的數字便是該分類目錄ID編輯當前typecho主題模板,在要調用某分類目錄的位置添加以下代碼方法一:widget…
👁 360
Typecho的Widget

Typecho的Widget 程序筆記 Typecho

通過Typecho的Widget_Options,可以方便地獲取Typecho的系統信息,或者方便地獲取相關配置、資源路徑等。這裏列出常用的Widget_Options函數和用法,方便各位筒子方便查閱。通過Widget_Options獲取路徑信息獲取內置URL通過這類api,可以獲取TE內置的一些特…
👁 193

推薦閱讀

PHP ob函数记录

PHP ob函數記錄 語言筆記 PHP

下面3個函數的用法 ob_get_contents(); ob_end_clean(); ob_start(); 可以藉助這幾個函數實現緩衝本地文件,以及執行本地腳本代碼。 使用ob_start()把輸出的代碼存到緩衝區,頁面不會顯示出來; 然後用ob_get_contents得到緩衝區的數據。 o…
👁 141
PHP preg

PHP preg 語言筆記 PHP

preg_match_all 函數用於執行一個全局正則表達式匹配。preg_match_all() 語法int preg_match_all ( string $pattern , string $subject [, array &$matches [, int $flags = PREG…
👁 169
PHP 三元运算符与if的详解

PHP 三元運算符與if的詳解 語言筆記 PHP

三元運算符語條件 ? 結果1 : 結果2 說明:問號前面的位置是判斷的條件,如果滿足條件時結果1,不滿足時結果2。本文對三元運算符和if...else...進行對比詳解,希望對大家有所幫助。今天在改論文在線的時候遇到了一個語句看不懂:$if_summary = $row['IF_SUMMARY']=…
👁 189
PHP强制转换类型

PHP強制轉換類型 語言筆記 PHP PHP採集 PHP與mysql

獲取數據類型1.如果想查看某個表達式的值和類型,用var_dump()。 2.如果只是想得到一個易讀懂的類型的表達方式用於調試,用 gettype()。3.要查看某個類型,不要用 gettype(),而用is_type() 函數。字符串轉換爲數值當一個字符串被當作數字來求值時,根據以下規則來決定結果…
👁 232