簡體   English   中英

為什么truncateTable在Joomla 3.7中不起作用?

[英]Why won't truncateTable work in Joomla 3.7?

我有以下代碼嘗試截斷表。 Joomla文檔使我相信這將起作用,但事實並非如此。 我想念什么?

$db = JFactory::getDbo();
truncate_query = $db->getQuery(true);
//$truncate_query = 'TRUNCATE ' . $db->quoteName('#__mytable');
$truncate_query->truncateTable($db->quoteName('#__mytable'));
$db->setQuery($truncate_query);
echo $truncate_query;
exit();

如果我使用注釋掉的行來手動生成SQL,它確實可以工作。 我仍然希望使用truncateTable函數的原因是我試圖在事務中包括截斷。 當我使用手動語句時,即使事務的另一部分失敗,該表仍會被截斷,這很煩人,因為其他語句依賴於被截斷的數據,因此,如果在不應有該表的情況下清空了該表,則不會剩下的數據可以再次運行事務。 很煩人!

這是調用/執行截斷查詢的方法:

JFactory::getDbo()->truncateTable('#__mytable');

現在還有更多細節...

這是Joomla源代碼中方法的代碼塊:

 public function truncateTable($table) { $this->setQuery('TRUNCATE TABLE ' . $this->quoteName($table)); $this->execute(); } 

如您所見, truncateTable()方法期望將表名作為唯一參數的字符串。 您正在提供反引號包裝的字符串-但該方法已經提供了反引號包裝的服務。 (即使刪除了反引號,您的方法也不會成功。)

setQuery()execute()調用已經在方法內部,因此您無需創建新的查詢對象或手動執行任何操作。

方法中沒有返回值,因此將返回默認的null ,因此, $truncate_query變為null 當您嘗試execute(null) ,您什么也沒得到-甚至沒有錯誤消息。

如果您想知道刪除了多少行,則需要先運行SELECT查詢才能對行進行計數。

如果要確保沒有剩余的數據行,則需要調用SELECT並檢查數據的零行。

這是對JSX問題的回答 (用不同的措詞)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM