Joomla 插入記錄

2023-03-10 11:24 更新

Joomla提供兩種方式來插入記錄,一種是SQL,一種是對象的方法

使用SQL插入記錄

JDatabaseQuery類提供了一些方法來方便構(gòu)建插入的SQL查詢語句,其中最常用的就是insert ,columns,values.典型的使用代碼如下:

// 得到數(shù)據(jù)庫鏈接對象
$db = JFactory::getDbo();
 
// 創(chuàng)建一個查詢對象
$query =$db->getQuery(true);
 
// 準(zhǔn)備插入的行
$columns =array('user_id','profile_key','profile_value','ordering');
 
// 準(zhǔn)備需要插入的值
$values =array(1001,$db->quote('zmax99.com'),$db->quote('Inserting a record using insert()'), 1);
 
// 構(gòu)建插入的查詢語句.
$query
    ->insert($db->quoteName('#__zmax_user'))
    ->columns($db->quoteName($columns))
    ->values(implode(',',$values));
 
// 設(shè)置查詢并且執(zhí)行.
$db->setQuery($query);
$db->execute();

在上面的代碼中使用了 quotename()方法 ,這個方法的作用是添加引號。在書寫查詢語句的時候,在表名或者字段名上加上引號,可以避免和數(shù)據(jù)庫的保留字沖突。

獲得插入記錄的ID

當(dāng)插入完成后,通過調(diào)用insertid方法獲得插入的ID.代碼如下:

// 得到剛剛插入記錄的ID
$new_row_id =$db->insertid();

如何存儲空值為NULL

如果字段的默認(rèn)值為NULL,那么你在插入的時候就不要設(shè)置這個字段名,讓數(shù)據(jù)庫系統(tǒng)字段給他賦值NULL.如果你的字段默認(rèn)值不是NULL,且該字段允許值為NULL,那么你需要明確的在代碼中指定插入NULL.代碼如下:

// 得到數(shù)據(jù)庫鏈接對象
$db = JFactory::getDbo();
 
// 創(chuàng)建一個查詢對象
$query =$db->getQuery(true);
 
// 準(zhǔn)備插入的行
$columns =array('user_id','profile_key','profile_value','ordering');
 
// 準(zhǔn)備需要插入的值
$values =array(1001,$db->quote('zmax99.com'), $db->quote('NULL'), 1);
 
// 構(gòu)建插入的查詢語句.
$query
    ->insert($db->quoteName('#__zmax_user'))
    ->columns($db->quoteName($columns))
    ->values(implode(',',$values));
 
// 設(shè)置查詢并且執(zhí)行.
$db->setQuery($query);
$db->execute(); 

使用對象插入記錄

JDatabaseDriver類提供了一個不需要寫任何SQL語句就可以插入記錄的方法。代碼如下:

// 創(chuàng)建一個對象
$profile =new stdClass();
$profile->user_id = 1001;
$profile->profile_key='zmax;
$profile->profile_value='Inserting a record using insertObject()';
$profile->ordering=1;
 
// 插入對象到zmax_user表中.
$result = JFactory::getDbo()->insertObject('#__zmax_user',$profile);

注意,在上面并沒有使用quoteName方法來給表名加上引號,這是因為 insertObject方法會自動的幫我們做這一操作。

在執(zhí)行插入的過程中,如果出現(xiàn)錯誤,insertObject方法會拋出一個錯誤。如果你的數(shù)據(jù)表中設(shè)置了主鍵值,那么建議你在執(zhí)行插入之前,先檢查這個主鍵值是否存在,這樣可以避免不必要的麻煩。

insertObject方法支持第三方個參數(shù),這個參數(shù)為表的主鍵名。當(dāng)你指定了這個參數(shù)后,在插入完成后,會更新對象,將主鍵值設(shè)置到對象上面去??梢允褂眠@種方式獲得插入的ID.

$result =$dbconnect->insertObject('#__my_table',$object,'primary_key');

上面的代碼執(zhí)行完成后,$object->primary_key的值將被更新為插入記錄的ID.

提示:在插入之前需要將$object->primary_key 設(shè)置為 null 或 0

 當(dāng)使用對象插入的時候如何存儲NULL

如果字段的默認(rèn)值為NULL,那么你的對象不加上這個屬性就可以了,讓數(shù)據(jù)庫系統(tǒng)字段給他賦值NULL.如果你的字段默認(rèn)值不是NULL,且該字段允許值為NULL,那么你需要明確的在代碼中指定插入NULL.代碼如下:

// 創(chuàng)建一個對象
$profile =new stdClass();
$profile->user_id = 1001;
$profile->profile_key='zmax';
$profile->profile_value =$db->quote('NULL');
$profile->ordering=1;
 
// 插入對象到zmax_user表中.
$result = JFactory::getDbo()->insertObject('#__zmax_user',$profile);


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號