【问题标题】:Mysql PDO, query exec is failingMysql PDO,查询执行失败
【发布时间】:2014-07-18 13:39:12
【问题描述】:

我在升级我的一个应用程序时遇到了奇怪的问题

  • 脚本语言为 PHP
  • 数据库是MYSQL
  • 我使用 PDO 类来处理

我有这个简单的用户更新模块,它包含 4 个不同的字段并且工作正常,今天我决定添加更新用户组的功能,并且查询 exec 从那时起就失败了。

in db - users 表有以下字段:

  • 用户名(varchar 50)
  • 密码(varchar 64)
  • 电子邮件(varchar 128)
  • 名称(varchar 50)
  • 组(整数 1)
  • 活动(int 1)

我在更新时执行的查询,在升级之前是这样的:

UPDATE users SET username = ?, email = ?, name = ?, active = ? WHERE id = 1
Array
(
    [username] => john
    [email] => john.doe@gmail.com
    [name] => John Doe
    [active] => 1
)

它工作得很好,现在我正在执行的查询是这样的:

UPDATE users SET username = ?, email = ?, name = ?, group = ?, active = ? WHERE id = 1
Array
(
    [username] => john
    [email] => john.doe@gmail.com
    [name] => John Doe
    [group] => 2
    [active] => 1
)

这个不起作用,但是如果我检查了错误信息,它会返回数组:

Array
(
    [0] => 00000
    [0] => 
    [0] => 
)

所以我尝试以这种方式只更新没有其他字段的组:

UPDATE users SET group = ? WHERE id = 1
Array
(
    [group] => 2
)

也失败了,这很奇怪,因为如果我将它复制到 phpmyadmin sql runer 中,它正在正确执行。

执行的代码是这样的:

if($this->_query = $this->_pdo->prepare($sql)) {
    if(count($params)) {
        $x = 1;
        foreach($params as $param) {
            $this->_query->bindValue($x, $param);
            $x++;
        }
    }

    if($this->_query->execute()) {
        $this->_insertid = $this->_pdo->lastInsertId();
        $this->_results = $this->_query->fetchAll(PDO::FETCH_OBJ);
        $this->_count = $this->_query->rowCount();
    } else {
        $this->_error = true;
    }
}

再次一切正常,除非我尝试更新组,然后它才会失败,我不明白也许有人这样做,appriciate所有提示:)

顺便说一句,也许值得一提的是,当我 INSERT 而不是 UPDATE 它被正确执行时,只有更新有一些问题

【问题讨论】:

标签: php mysql pdo


【解决方案1】:

Group 是 MySQL 中的保留字 http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html

不知道您的代码中是否还有其他问题,但请尝试在 [reserved] 单词周围使用``

`group`

【讨论】:

  • “组是一个被禁止的词” - 有点苛刻的词。不是“禁止”,一次可以使用,更多的是“保留关键字”。
  • 它不会是什么或者叫什么,这家伙很聪明:D 它已经工作了:) 虽然当我插入或选择并说组它的工作并且如果我更新它需要这些标记时,这很奇怪。 ..无论哪种方式,谢谢你的帮助伙伴:)
猜你喜欢
  • 1970-01-01
  • 2012-07-25
  • 1970-01-01
  • 1970-01-01
  • 2021-09-23
  • 2023-03-18
  • 1970-01-01
  • 2018-10-04
  • 2021-11-06
相关资源
最近更新 更多