本教程分為兩個(gè)獨(dú)立的部分:
- 從數(shù)據(jù)庫(kù)中插入、更新和刪除數(shù)據(jù)。
- 選擇從一個(gè)或多個(gè)表的數(shù)據(jù)和檢索它以各種不同的形式。
看著這部分的文檔插入、更新和刪除數(shù)據(jù)從一個(gè)數(shù)據(jù)庫(kù)表中
Joomla提供了一個(gè)復(fù)雜的數(shù)據(jù)庫(kù)抽象層簡(jiǎn)化為第三方開發(fā)人員使用。Joomla的新版本平臺(tái)API提供額外的功能進(jìn)一步擴(kuò)展了數(shù)據(jù)庫(kù)層,和包括功能連接器等更多種類的數(shù)據(jù)庫(kù)服務(wù)器和連接代碼的查詢鏈接來改善可讀性和簡(jiǎn)化SQL編碼。
Joomla可以使用不同類型的SQL數(shù)據(jù)庫(kù)系統(tǒng)和運(yùn)行在不同的環(huán)境中與不同的表前綴。除了這些功能之外,類自動(dòng)創(chuàng)建數(shù)據(jù)庫(kù)連接。除了您只需要兩行代碼實(shí)例化對(duì)象從數(shù)據(jù)庫(kù)得到的結(jié)果在各種格式。使用Joomla數(shù)據(jù)庫(kù)層確保了最大的兼容性和靈活性為你擴(kuò)展。
查詢
Joomla的數(shù)據(jù)庫(kù)查詢已經(jīng)改變了自新的Joomla框架介紹了“查詢鏈接”現(xiàn)在的推薦方法建立數(shù)據(jù)庫(kù)查詢(盡管仍然支持字符串查詢)。
查詢鏈接指的方法連接的方法,一個(gè)接一個(gè),每個(gè)方法返回一個(gè)對(duì)象,可以支持下一個(gè)方法,改善可讀性和簡(jiǎn)化代碼。
獲得JDatabaseQuery類的一個(gè)新實(shí)例我們使用JDatabaseDriver getQuery方法:
$db = JFactory::getDbo();
$query = $db->getQuery(true);
JDatabaseDriver::getQuery接受一個(gè)可選參數(shù),新美元,可真或假(默認(rèn)是錯(cuò)誤的)。
查詢我們的數(shù)據(jù)源可以調(diào)用一些JDatabaseQuery方法;這些方法封裝了數(shù)據(jù)源的查詢語言(SQL)在大多數(shù)情況下,向開發(fā)人員隱藏query-specific語法和提高開發(fā)人員的源代碼的可移植性。
一些比較常用的方法包括:選擇、從加入,和秩序。也有方法如插入、更新和刪除修改記錄的數(shù)據(jù)存儲(chǔ)。通過鏈接這些和其他方法調(diào)用,您可以創(chuàng)建幾乎任何查詢你的數(shù)據(jù)存儲(chǔ)在不影響代碼的可移植性。
插入一個(gè)記錄
使用SQL
JDatabaseQuery類提供了許多方法來構(gòu)建插入查詢,最常見的被插入,列和價(jià)值觀
// Get a db connection.
$db = JFactory::getDbo();
// Create a new query object.
$query = $db->getQuery(true);
// Insert columns.
$columns = array('user_id', 'profile_key', 'profile_value', 'ordering');
// Insert values.
$values = array(1001, $db->quote('custom.message'), $db->quote('Inserting a record using insert()'), 1);
// Prepare the insert query.
$query
->insert($db->quoteName('#__user_profiles'))
->columns($db->quoteName($columns))
->values(implode(',', $values))
// Set the query using our newly populated query object and execute it.
$db->setQuery($query);
$db->execute();
使用對(duì)象
JDatabaseDriver類還提供了一個(gè)方便的方法為直接對(duì)象保存到數(shù)據(jù)庫(kù)允許我們添加一個(gè)記錄表格,無需編寫一行SQL。
注意,我們不需要逃避的表名;insertObject方法為我們做這個(gè)。
insertObject方法會(huì)拋出一個(gè)錯(cuò)誤如果有問題將記錄插入到數(shù)據(jù)庫(kù)表中。
我們需要確保記錄不存在之前插入,所以添加一些記錄檢查之前執(zhí)行insertObject方法將推薦。
更新記錄
使用SQL
JDatabaseQuery類還提供了方法來構(gòu)建更新查詢,尤其是更新和設(shè)置。我們還重用我們用另一種方法在創(chuàng)建select語句時(shí),在方法。
$db = JFactory::getDbo();
$query = $db->getQuery(true);
// Fields to update.
$fields = array(
$db->quoteName('profile_value') . ' = ' . $db->quote('Updating custom message for user 1001.'),
$db->quoteName('ordering') . ' = 2'
);
// Conditions for which records should be updated.
$conditions = array(
$db->quoteName('user_id') . ' = 42',
$db->quoteName('profile_key') . ' = ' . $db->quote('custom.message')
);
$query->update($db->quoteName('#__user_profiles'))->set($fields)->where($conditions);
$db->setQuery($query);
$result = $db->execute();
使用對(duì)象
像insertObject JDatabaseDriver類提供了一種便利方法更新一個(gè)對(duì)象。
下面我們將與新值更新我們的自定義表使用現(xiàn)有的id主鍵:
// Create an object for the record we are going to update.
$object = new stdClass();
// Must be a valid primary key value.
$object->id = 1;
$object->title = 'My Custom Record';
$object->description = 'A custom record being updated in the database.';
// Update their details in the users table using id as the primary key.
$result = JFactory::getDbo()->updateObject('#__custom_table', $object, 'id');
就像insertObject,updateObject負(fù)責(zé)為我們逃離表名。
updateObject方法會(huì)拋出一個(gè)錯(cuò)誤如果有問題更新記錄到數(shù)據(jù)庫(kù)表中。
我們需要確保記錄已經(jīng)存在在試圖更新之前,我們可能會(huì)添加一些記錄檢查之前執(zhí)行updateObject方法。
刪除一個(gè)記錄
最后,還有一個(gè)delete方法從數(shù)據(jù)庫(kù)刪除記錄。
Finally, there is also a delete method to remove records from the database.
$db = JFactory::getDbo();
$query = $db->getQuery(true);
// delete all custom keys for user 1001.
$conditions = array(
$db->quoteName('user_id') . ' = 1001',
$db->quoteName('profile_key') . ' = ' . $db->quote('custom.%')
);
$query->delete($db->quoteName('#__user_profiles'));
$query->where($conditions);
$db->setQuery($query);
$result = $db->execute();





