mysqli->query 在更新时返回 true,但不影响行
Posted
技术标签:
【中文标题】mysqli->query 在更新时返回 true,但不影响行【英文标题】:mysqli->query returns true on update, but no rows affected 【发布时间】:2017-07-29 09:59:06 【问题描述】:我在尝试更新 mysql 中的行时遇到了一些问题。
我尝试打印查询并在我的 sql 客户端中运行它,它会按预期更新行。
这一行:
$this->mysqli->query($query);
按预期返回 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->error都是空的。
我尝试运行的查询是:
UPDATE payment_scheduled SET active = 0 WHERE id=1 OR id=2
列:
id - type: int - length: 10 - extra: unsigned, pk
活动 - 类型:tinyint - 长度:1 - 额外:无符号
【问题讨论】:
我没有看到查询 .. 可能是您的查询工作正常但不匹配行.. 但是如果我输入 var_dump($query);在查询函数中复制该查询并将其粘贴到我的 sql 客户端中,它工作得很好。那么问题的根源一定在上面的函数之内? 显示查询..更好.. 所有列类型都是数字? 表格是否由某些 IDE 操作查看? .. 尝试退出 IDE 并重新打开 【参考方案1】:好的,所以我发现了问题。
我在一个方法中开始一个事务,但我从来没有提交过。
很抱歉浪费您的时间,您无法通过查看我提供的代码找出问题所在。我确定问题出在该查询方法中(但我错了)。
我会投票赞成你们每个试图提供帮助的人。
【讨论】:
谢谢,正是这条评论帮助了我……【参考方案2】:更新 0 行不算失败,它只是意味着根据选择标准没有要更新的行。在许多情况下,这将是预期的行为,因此返回 true。
【讨论】:
我正在尝试更新 2 行,当我复制查询时,它在我的 sql 客户端中运行良好。受影响的行给了我 -1 而不是 0。 $this 不是你的 mysqli 对象吗?所以不是 $this->mysqli->errno 和类似的只是做 $this->errno? 以上 $this->query 不,$this 是我的类(在我的例子中是 DBWrapper),它有一个名为 $mysqli 的私有变量。在类的构造函数中,我实例化了一个 mysqli 对象。像这样: $this->mysqli = new mysqli(..... 在if (!$this->stmt = $this->mysqli->query($query))
你有一个=。你确定这是在做你想做的事吗?以上是关于mysqli->query 在更新时返回 true,但不影响行的主要内容,如果未能解决你的问题,请参考以下文章
未找到记录时,mysqli_query 不返回 false [重复]
Mysqli_query 返回 false 并且 Mysqli_error 返回 NULL? [复制]