【问题标题】:update query not working in joomla更新查询在 joomla 中不起作用
【发布时间】:2013-04-24 20:21:12
【问题描述】:

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

【问题讨论】:

    标签: php mysql joomla joomla-extensions


    【解决方案1】:

    我想到了几种可能性。首先是启用了--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(即,在连接时),您还将在一般日志。

    【讨论】:

    • 我发现了错误,请参阅我的原始帖子,但感谢您的回答。也许它可以帮助那些在 mysql 引用方面遇到问题的人。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多