我正在研究一个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 :(得分: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
,您也会将此视为一般日志中执行的语句。