php - Mysql PDO,查询执行失败

标签 php mysql pdo

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

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

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

在数据库中 - 用户表有以下字段:

  • 用户名 (varchar 50)
  • 密码(varchar 64)
  • 电子邮件(varchar 128)
  • 名称(可变字符 50)
  • 组(int 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;
    }
}

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

顺便说一句,当我 INSERT 而不是 UPDATE 时,它被正确执行,只有 Update 有一些问题

最佳答案

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

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

`group`

关于php - Mysql PDO,查询执行失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24826412/

相关文章:

php - 左加入过滤器

php - ORDER BY 日期排序仅使用天和月mysql

php - 以 PHP 方式修复连接超时(在共享服务器上)

php - 如何使用 PDO 在一次数据库行程中插入多条记录?

php - 查询获取相关表中的数据

php - 无法使用 PHP 从 SQL Server 存储过程检索输出参数

php - 库作为 Codeigniter 中的单例?

php - 检查 PHP 指定的开始时间和结束时间之间的可用时间

php - PDOStatement::fetch() 和重复的字段名称

php - 在 Zend Framework 中缓存 PDOStatement 对象