mysqli->查询在更新时返回true,但没有行影响

时间:2017-03-08 17:30:22

标签: php mysql oop mysqli

我在尝试更新mysql中的行时遇到了一些问题。

我尝试打印查询并在我的sql客户端中运行它,并按预期更新行。

这一行:

  

$这 - > mysqli->查询($查询);

按预期返回bool(true),并根据php文档(http://php.net/manual/en/mysqli.query.php)正确。

  

失败时返回FALSE。对于成功的SELECT,SHOW,DESCRIBE或EXPLAIN查询,mysqli_query()将返回一个mysqli_result对象。对于其他成功的查询,mysqli_query()将返回TRUE。

public function query($query, $parameters = array()) {
    if ((is_array($parameters) && count($parameters) > 0) || (is_string($parameters) && !empty($parameters))) {
        $this->lastPrepared = true;

        if ($this->prepare($query) === false)
            return false;

        $this->bind((is_array($parameters) ? $parameters : array($parameters)));
        if ($this->execute() === false)
            return false;
    } else {
        $this->lastPrepared = false;

        if (!$this->stmt = $this->mysqli->query($query)) {
            debug('Query failed: (' . $this->mysqli->errno . ') ' . $this->mysqli->error);
            return false;
        }
    }

    return $this->stmt;
}

我一直在搜索,发现类似于我的问题的问题,但没有答案帮助我找到了解决方案。

编辑:好的,我现在可以看到$ this-> mysqli-> affected_rows;返回-1,表示存在错误。但是,mysqli-> errno和mysqli->错误都是空的。

我尝试运行的查询是:

  

UPDATE payments_scheduled SET active = 0 WHERE id = 1 OR id = 2

列:

id - type:int - length:10 - extra:unsigned,pk

active - type:tinyint - length:1 - extra:unsigned

2 个答案:

答案 0 :(得分:2)

更新0行不算作失败,它只是表示根据选择条件没有要更新的行。在许多情况下,这将是预期的行为,因此返回true。

答案 1 :(得分:0)

好的,所以我发现了问题。

我在一个方法中开始了一个交易,而且我从来没有参与过。

我为浪费你的时间道歉,你无法通过查看我提供的代码来解决问题。我确信问题出在该查询方法中(但我错了)。

我会投票支持你们每个人都试图提供帮助。