Php mysql\u受影响的\u行返回0
我对PHP中的mysql\u受影响的\u行函数有一个问题。我使用MySQL更新,在phpMyAdmin中我可以看到,“确认”从0变为1,但是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
$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,但这个假设被证明是错误的;