0

我正在开发一个 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

它可以正常工作。我读过关于用 orso 引用键和值的信息$this->_db->quoteName(),但是我找不到任何带有类似查询的示例,SET position=position+1但只是SET position=$newval因为我不知道要引用什么以及如何引用。

//编辑:发现错误,它必须是$this->_db->query()而不是$this->_db->result()

4

1 回答 1

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命令进行设置(即,在连接时),您还将在常规日志中将其视为已执行的语句。

于 2013-04-24T23:41:42.190 回答