更新查询无法在joomla中工作

时间:2013-04-24 20:21:12

标签: php mysql joomla joomla-extensions

我正在研究一个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()

1 个答案:

答案 0 :(得分: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,或混合中的任何其他层)使用--safe-updates命令(即连接时)设置SET,您也会将此视为一般日志中执行的语句。