mysqli_affected_rows
是一种奇怪的行为。 fname
更新后不会返回1,可能是2次mysqli_query
造成的。如果更新了另一个字段,我可以获得 1。
mysqli_query($mysqli, "UPDATE persons SET fname='$fname' WHERE id='$id'");
mysqli_query($mysqli, "UPDATE tools SET knife='$knife', other='$other' WHERE person_id='$id'");
if (mysqli_affected_rows($mysqli) > 1){
echo json_encode(array(
'id' => (int)$id,
'fname' => $fname,
'tools' => array(
'knife' => $knife,
'other' => $other
)
));
}
那么在我的情况下如何返回更新的行呢?
最佳答案
你的假设是正确的,因为第二个查询已经运行,这将给出不同的结果,所以最好的办法是稍微重组你的代码以......
mysqli_query($mysqli, "UPDATE persons SET fname='$fname' WHERE id='$id'");
if (mysqli_affected_rows($mysqli) >= 1){
mysqli_query($mysqli, "UPDATE tools SET knife='$knife', other='$other' WHERE person_id='$id'");
echo json_encode(array(
'id' => (int)$id,
'fname' => $fname,
'tools' => array(
'knife' => $knife,
'other' => $other
)
));
}
(只是将其更新为 >=1
就像这样 - 我认为如果只更新 1 行就可以了)
虽然我也建议查看准备好的语句并绑定(bind)值,而不是直接将值放入 SQL 语句。
如果你的查询执行失败了,你还应该在每个点检查......像
if ( !mysqli_query($mysqli, "UPDATE tools SET knife='$knife', other='$other' WHERE person_id='$id'")) {
die ( "Error-".mysqli_error($mysqli));
}
或者如果你可以更新任何东西或什么都不更新,那么......
mysqli_query($mysqli, "UPDATE persons SET fname='$fname' WHERE id='$id'");
$rowsUpdated = mysqli_affected_rows($mysqli);
mysqli_query($mysqli, "UPDATE tools SET knife='$knife', other='$other' WHERE person_id='$id'");
$rowsUpdated += mysqli_affected_rows($mysqli);
if ($rowsUpdated >= 1){
echo json_encode(array(
'id' => (int)$id,
'fname' => $fname,
'tools' => array(
'knife' => $knife,
'other' => $other
)
));
}
这只是将两个 SQL 语句中更新的总计行相加。
关于php - 检查更新语句是否已经执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48033322/