【问题标题】:Why isn't affected_rows working in this PHP Mysqli code?为什么在此 PHP Mysqli 代码中不受影响的行?
【发布时间】:2017-12-28 22:33:46
【问题描述】:

我有一个 mysqli 数据库对象 $DataBase 并且以下代码按预期工作:

    $stmt = $DataBase->stmt_init();
    $stmt->prepare("UPDATE `optshop_stock` SET quantity_b = ? WHERE product_id = ?;");
    $stmt->bind_param('ii', $qty, $sku);
    $stmt->execute();
    $stmt->close();

但是当我添加:

echo $stmt->affected_rows;

介于 $stmt->execute()$stmt->close() 之间没有回显任何值,如果什么都没发生,甚至不会返回零。我是否以正确的方式使用此语句?

(我遵循了这个http://php.net/manual/en/mysqli-stmt.affected-rows.php 示例)

【问题讨论】:

  • 认为你应该这样做:echo $Database->affected_rows;
  • 你没有按照“to a T”的例子。
  • 尝试将此添加到脚本的顶部 ~ ini_set('display_errors', 'On'); error_reporting(E_ALL); mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);。鉴于您没有显示任何值,我会说您的查询很有可能失败
  • 正好在这两者之间。
  • @FunkFortyNiner 是什么意思?

标签: php mysqli


【解决方案1】:

可以在数据库级别检索该属性(参考here):

echo $DataBase->affected_rows;

【讨论】:

  • 当我在 $stmt-> 关闭后添加它时,我收到致命错误:调用 /usr/local/www/www.lemongrasshouse.ru/msk/includes 中的未定义方法 mysqli_stmt::affected_rows() /ajax.php 第 38 行
  • 是的,当我添加 echo $DataBase->affected_rows;在$stmt->关闭之后;它有效,而不是以前。这仍然让我不解为什么 $stmt->affected_rows;不工作。
  • 其实不行,现在这样只能返回0了。
  • 您是否在再次测试之前回滚了您的服务器?
  • 实际上,$stmt->store_result();仅适用于 SELECT 而不是 INSERT,@TommasoBelluzzo UPDATE 和 DELETE。
【解决方案2】:

我认为你应该尝试在$stmt->execute()之后添加$stmt->store_result(),否则使用$stmt->affected_rows时不能得到正确的结果

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-19
相关资源
最近更新 更多