【问题标题】:Affected_rows returns negative -1 but insertAffected_rows 返回负数 -1 但插入
【发布时间】:2014-10-22 15:39:18
【问题描述】:

我有以下 PHP 代码,当我执行它时,affected_rows 返回 -1,但是当我在 HeidiSQL 中运行 select 时,数据在表中。为什么会这样?

$id = filter_input(INPUT_POST, 'id', FILTER_VALIDATE_INT);
$estatus = filter_input(INPUT_POST, 'estatus');
$larga = filter_input(INPUT_POST, 'larga');
$corta = filter_input(INPUT_POST, 'corta');
$fecha = filter_input(INPUT_POST, 'fecha');
$usuario = $_SESSION['id'];
$query = 'INSERT INTO tarea(oportunidad_id, estatus, usuarioId, tareaTarea, fechaLimite, tareaCorta)'
       . 'VALUES(' . $id . ', "' . utf8_decode($estatus) . '", ' . $usuario . ', "' . $larga . '", "' . $fecha .
     '", "' . $corta . '")';
$con->query($query) or exit("Error: " . $con->errno . ": " . $con->error);
if ($con->affected_rows > 0) {
    echo 'Tarea agregada';
} else {
    exit($con->mensaje_error());
}

【问题讨论】:

  • Returns the number of affected rows on success, and -1 if the last query failed.
  • Emmm 我知道,但是好像查询真的不会失败,因为数据是插入到表上的。
  • 使用mysqli 时,您应该使用参数化查询和bind_param 将用户数据添加到您的查询中。 请勿使用字符串连接来完成此操作,因为您将创建严重的SQL injection bugs。我严重怀疑filter_input 是否足够。
  • 感谢您的推荐 :)

标签: php mysql mysqli insert


【解决方案1】:
if ($result = $con->query($query)){
    if($result->num_rows > 0){
        echo 'Tarea agregada';
    }
} else {
    exit($con->mensaje_error());
}

尝试使用 num_rows 而不是受影响的行。并且你可以在这个 if 语句中做 $result = $con->query ,它和$con->query($query) or exit(... 做同样的事情

您不能询问受影响行的连接,您必须将结果保存为变量并对该结果执行->affected_rows

查询没有失败,您检查查询的方式失败了

【讨论】:

  • 这是一种方式,但是什么时候我应该使用affected_rows?
  • affected_rows 用于插入、更新、替换和删除。 num_rows 用于选择。
  • 这就是重点。我想使用affected_rows 来验证INSERT 是否正确。
  • 那么你可以简单地做if($con->query("INSERT ...")){
  • 我投了反对票,因为这并不能真正回答问题
猜你喜欢
  • 2015-07-30
  • 1970-01-01
  • 1970-01-01
  • 2012-05-14
  • 2016-08-07
  • 2016-10-07
  • 2020-10-18
  • 2018-08-28
  • 2013-02-07
相关资源
最近更新 更多