2013-04-24 126 views
0

我工作的一個Joomla擴展,我想用我的模型下面的代碼來更新我的Joomla擴展的數據庫表條目:更新查詢中的Joomla不工作

$this->_db->setQuery(
    $this->_db->getQuery(true) 
    ->update('#__my_table') 
    ->set('position=position+1') 
); 
$dbres = $this->_db->result(); 

但是它不」採取任何動作和(上和錯誤報告在全局配置最大的開發)將不輸出錯誤

我直接在phpMyAdmin輸入的查詢:

UPDATE cprn7_my_table SET position=position+1 

和它的作品沒有任何問題。 我讀了關於引用鍵和值與$this->_db->quoteName()左右,但我找不到任何與SET position=position+1查詢的例子,但只有SET position=$newval,所以我不知道如何引用和如何。

//編輯:發現錯誤,它必須是$this->_db->query()而不是$this->_db->result()

回答

0

幾個可能性浮現在腦海中。首先是啓用--safe-updates設置,防止WHERE子句缺少主鍵列規範的更新(和刪除)。

phpMyAdmin可能會關閉此設置,而您的默認MySQL客戶端設置(my.cnf,[client]下)可能會啓用它。您可以使用show variables語句來發現設置的值。此外,請參閱本文檔的詳細信息:http://dev.mysql.com/doc/refman/5.5/en/mysql-command-options.html#option_mysql_safe-updates

第二個想法:你可以使用反引號引用的列名,例如:

SET `position`=`position` + 1 

然而,如果這似乎仍然沒有效果,而且,如果您的服務器擁有管理員級別的MySQL帳戶,則可以打開常規日誌,然後運行查詢,然後再關閉它,然後檢查結果。請參閱本文檔的與--general-log和相關設置工作:http://dev.mysql.com/doc/refman/5.5/en/query-log.html

順便說一句,如果你的MySQL客戶端提供商(或Joomla,或混合任何其他層)使用SET命令(即,在連接)設置--safe-updates,您也將在通用日誌中將其視爲已執行的語句。

+0

我發現了錯誤,請參閱我原來的帖子,但是謝謝你的回答。也許它可以幫助那些在mysql引用時遇到麻煩的人。 – user1950929 2013-04-25 18:53:11