Php mysql\u受影响的\u行返回0

Php mysql\u受影响的\u行返回0,php,mysql,Php,Mysql,我对PHP中的mysql\u受影响的\u行函数有一个问题。我使用MySQL更新,在phpMyAdmin中我可以看到,“确认”从0变为1,但是MySQL\u受影响的\u行仍然返回0!我找不到解决办法。我的代码是: $query = "UPDATE visits SET confirmed = 1 WHERE id = ? AND confirmed = 0 AND expire > now() - INTERVAL 10 MINUTE;"; $stmt

我对PHP中的mysql\u受影响的\u行函数有一个问题。我使用MySQL更新,在phpMyAdmin中我可以看到,“确认”从0变为1,但是MySQL\u受影响的\u行仍然返回0!我找不到解决办法。我的代码是:

$query = "UPDATE visits                 
SET confirmed = 1
WHERE id = ? AND confirmed = 0 AND expire >  now() - INTERVAL 10 MINUTE;";


$stmt = $this->conn->stmt_init();

if($stmt->prepare($query)) {
$stmt->bind_param('i',$id); //$id is a function parameter
$res = $stmt->execute();

$stmt->close();

echo mysql_affected_rows();
}

看起来您使用的是PDO,而不是mysql_*函数。 因此,您应该使用uso PDOs rowCount函数:

$query = "UPDATE visits                 
    SET confirmed = 1
    WHERE id = ? AND confirmed = 0 AND expire >  now() - INTERVAL 10 MINUTE;";

$stmt = $this->conn->stmt_init();

if($stmt->prepare($query)) {
    $stmt->bind_param('i',$id); //$id is a function parameter
    $res = $stmt->execute();

    echo $stmt->rowCount();

    $stmt->close();
}

看起来您使用的是PDO,而不是mysql_*函数。 因此,您应该使用uso PDOs rowCount函数:

$query = "UPDATE visits                 
    SET confirmed = 1
    WHERE id = ? AND confirmed = 0 AND expire >  now() - INTERVAL 10 MINUTE;";

$stmt = $this->conn->stmt_init();

if($stmt->prepare($query)) {
    $stmt->bind_param('i',$id); //$id is a function parameter
    $res = $stmt->execute();

    echo $stmt->rowCount();

    $stmt->close();
}
用这个

PDOStatement::rowCount返回受查询影响的行数


PDOStatement::rowCount返回受查询影响的行数

您需要将连接作为参数传递给函数

echo mysql_affected_rows($this->conn);

您需要将连接作为参数传递给函数

echo mysql_affected_rows($this->conn);
使用UPDATE语句时,用于获取受影响的行数:

$stmt = $this->conn->stmt_init();

if($stmt->prepare($query)) {
    $stmt->bind_param('i',$id); //$id is a function parameter
    $res = $stmt->execute();
    echo $stmt->affected_rows;
    $stmt->close();
}
在使用UPDATE语句时,它还需要位于close语句之前,以便获取受影响的行数:

$stmt = $this->conn->stmt_init();

if($stmt->prepare($query)) {
    $stmt->bind_param('i',$id); //$id is a function parameter
    $res = $stmt->execute();
    echo $stmt->affected_rows;
    $stmt->close();
}

它还需要在结束语句之前,因为每个人似乎都认为您使用的是MySQLi方式,而在我看来,它更像是MySQLi方式:

$query = "
  UPDATE visits                 
  SET confirmed = 1
  WHERE id = ?
    AND confirmed = 0
    AND expire > now() - INTERVAL 10 MINUTE
";

$stmt = $this->conn->stmt_init();

if ($stmt->prepare($query)) {
  $stmt->bind_param('i', $id); //$id is a function parameter
  $res = $stmt->execute();
  echo $stmt->affected_rows; // Here's the good stuff
  $stmt->close();
}

因为每个人似乎都认为你在使用MySQLi,而在我看来,这更像是MySQLi的方式:

$query = "
  UPDATE visits                 
  SET confirmed = 1
  WHERE id = ?
    AND confirmed = 0
    AND expire > now() - INTERVAL 10 MINUTE
";

$stmt = $this->conn->stmt_init();

if ($stmt->prepare($query)) {
  $stmt->bind_param('i', $id); //$id is a function parameter
  $res = $stmt->execute();
  echo $stmt->affected_rows; // Here's the good stuff
  $stmt->close();
}

@博诺,不是真的。对于PDO,rowCount函数确实返回受影响的行。不幸的是,当我使用此函数时,我得到了致命错误:调用未定义的方法mysqli_stmt::rowCount这是因为您忘了提到您正在使用mysqli,所以从您的代码中,我假设它是PDO,但这个假设被证明是错误的@博诺,不是真的。对于PDO,rowCount函数确实返回受影响的行。不幸的是,当我使用此函数时,我得到了致命错误:调用未定义的方法mysqli_stmt::rowCount这是因为您忘了提到您正在使用mysqli,所以从您的代码中,我假设它是PDO,但这个假设被证明是错误的;