mysqli_stmt::$affected_rows
我刚刚发现了和mysqli::$affected_rows
我没想到的区别。
我假设mysqli::$affected_rows
可以在关闭语句后调用它,因为我希望它根据连接上执行的最后一个查询进行报告。我认为如果声明被关闭并不重要。然而,它似乎确实有所作为。
这段代码:
$db_err_msg = 'Database Error: Failed to update profile';
$sql = "UPDATE tblProfiles SET lngPhoneNumber = ? WHERE lngProfileId = ?";
$stmt = $mysqli->prepare($sql) or output_error($db_err_msg);
$phone = 5555555555;
$id = 10773;
$stmt->bind_param('ii', $phone, $id) or output_error($db_err_msg);
$stmt->execute() or output_error($db_err_msg);
if ($mysqli->warning_count) {
$warnings = $mysqli->get_warnings();
do {
trigger_error('Database Warning (' . $warnings->errno . '): '
. $warnings->message, E_USER_WARNING);
} while ( $warnings->next() );
}
else {
echo 'no warnings', "\n\n";
}
echo 'Before $stmt->close()', "\n";
echo '$mysqli->affected_rows is ', $mysqli->affected_rows, "\n";
echo '$stmt->affected_rows is ', $stmt->affected_rows, "\n";
echo '$mysqli->affected_rows is ', $mysqli->affected_rows, "\n";
$stmt->close();
echo "\n", 'After $stmt->close()', "\n";
echo '$mysqli->affected_rows is ', $mysqli->affected_rows, "\n";
产生这个输出:
没有警告
$stmt->close() 之前
$mysqli->affected_rows 为 1
$stmt->affected_rows 为 1
$mysqli->affected_rows 为 1
$stmt->close() 之后
$mysqli->affected_rows 为 -1
请注意最终值如何为负 1。
PHP手册mysqli::$affected_rows
说:
-1 表示查询返回错误
查询按预期更新了记录,并且没有返回错误或警告。然而,这意味着有一个错误。我不确定这是否是一个错误,但这肯定不是我所期望的。无论您使用哪一种,显然最安全的方法是在执行语句之后立即检查它。