2013-04-24 112 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