如何向 PHP 中的 SQL UPDATE 函数添加错误处理?
How can I add error handling to my SQL UPDATE function in PHP?
问题概述
我有一个功能可以更新我的 SQL 数据库中的用户用户名。我正在尝试添加一些错误处理(例如 return true/false),但我不知道该怎么做。
当前函数
function updateUid($conn, $usersUid, $rowId) {
$sql = "UPDATE users SET usersUid = ? WHERE usersId = ?";
$stmt = mysqli_stmt_init($conn);
if (!mysqli_stmt_prepare($stmt, $sql)) {
//error - bad SQL call
exit();
}
mysqli_stmt_bind_param($stmt, "ss", $usersUid, $rowId);
mysqli_stmt_execute($stmt);
return true;
mysqli_stmt_close($stmt);
}
如您所见,现在它只是 return 为真,不管天气是否正常。
我试过的
我尝试使用 mysqli_stmt_get_result($stmt)
,但我认为我没有正确使用它:
function updateUid($conn, $usersUid, $rowId) {
$sql = "UPDATE users SET usersUid = ? WHERE usersId = ?";
$stmt = mysqli_stmt_init($conn);
if (!mysqli_stmt_prepare($stmt, $sql)) {
//error - bad SQL call
exit();
}
mysqli_stmt_bind_param($stmt, "ss", $usersUid, $rowId);
mysqli_stmt_execute($stmt);
$resultData = mysqli_stmt_get_result($stmt);
if ($row = mysqli_fetch_assoc($resultData)) {
return $row;
} else {
$result = false;
return $result;
}
mysqli_stmt_close($stmt);
}
据我所知,mysqli_stmt_get_result()
return 什么都没有,这是有道理的,因为我不是在获取数据,而是在放置数据。
期望的结果
如前所述,我真的很希望能够 true/false return 了解该功能是否有效。在 PHP 中测试 SQL 注入结果的最佳方法是什么?
mysqli_stmt_affected_rows()
会告诉您更新了多少行。
<?php
function updateUid($conn, $usersUid, $rowId) {
$sql = "UPDATE users SET usersUid = ? WHERE usersId = ?";
$stmt = mysqli_stmt_init($conn);
if (!mysqli_stmt_prepare($stmt, $sql)) {
//error - bad SQL call
exit();
}
mysqli_stmt_bind_param($stmt, "ss", $usersUid, $rowId);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_affected_rows($stmt) > 0;
mysqli_stmt_close($stmt);
return $result;
}
请注意,这可能为 0,原因有二:
- 没有行匹配
$rowId
- 匹配行中的
usersUid
已经等于 $usersUid
,所以没有任何变化。
请参阅 PHP, MySQL - can you distinguish between rows matched and rows affected? 了解如何更改连接到数据库的方式,以便此 returns 与 WHERE
条件匹配的行数而不是行数实际上已更新。
问题概述
我有一个功能可以更新我的 SQL 数据库中的用户用户名。我正在尝试添加一些错误处理(例如 return true/false),但我不知道该怎么做。
当前函数
function updateUid($conn, $usersUid, $rowId) {
$sql = "UPDATE users SET usersUid = ? WHERE usersId = ?";
$stmt = mysqli_stmt_init($conn);
if (!mysqli_stmt_prepare($stmt, $sql)) {
//error - bad SQL call
exit();
}
mysqli_stmt_bind_param($stmt, "ss", $usersUid, $rowId);
mysqli_stmt_execute($stmt);
return true;
mysqli_stmt_close($stmt);
}
如您所见,现在它只是 return 为真,不管天气是否正常。
我试过的
我尝试使用 mysqli_stmt_get_result($stmt)
,但我认为我没有正确使用它:
function updateUid($conn, $usersUid, $rowId) {
$sql = "UPDATE users SET usersUid = ? WHERE usersId = ?";
$stmt = mysqli_stmt_init($conn);
if (!mysqli_stmt_prepare($stmt, $sql)) {
//error - bad SQL call
exit();
}
mysqli_stmt_bind_param($stmt, "ss", $usersUid, $rowId);
mysqli_stmt_execute($stmt);
$resultData = mysqli_stmt_get_result($stmt);
if ($row = mysqli_fetch_assoc($resultData)) {
return $row;
} else {
$result = false;
return $result;
}
mysqli_stmt_close($stmt);
}
据我所知,mysqli_stmt_get_result()
return 什么都没有,这是有道理的,因为我不是在获取数据,而是在放置数据。
期望的结果
如前所述,我真的很希望能够 true/false return 了解该功能是否有效。在 PHP 中测试 SQL 注入结果的最佳方法是什么?
mysqli_stmt_affected_rows()
会告诉您更新了多少行。
<?php
function updateUid($conn, $usersUid, $rowId) {
$sql = "UPDATE users SET usersUid = ? WHERE usersId = ?";
$stmt = mysqli_stmt_init($conn);
if (!mysqli_stmt_prepare($stmt, $sql)) {
//error - bad SQL call
exit();
}
mysqli_stmt_bind_param($stmt, "ss", $usersUid, $rowId);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_affected_rows($stmt) > 0;
mysqli_stmt_close($stmt);
return $result;
}
请注意,这可能为 0,原因有二:
- 没有行匹配
$rowId
- 匹配行中的
usersUid
已经等于$usersUid
,所以没有任何变化。
请参阅 PHP, MySQL - can you distinguish between rows matched and rows affected? 了解如何更改连接到数据库的方式,以便此 returns 与 WHERE
条件匹配的行数而不是行数实际上已更新。