检查是否已执行更新语句

时间:2017-12-30 11:05:20

标签: php mysql sql

<div class="questions"> <label letter="green ">Hello World!</label> </div>是一种奇怪的行为。如果mysqli_affected_rows更新,它将不会返回1,可能由fname的2倍引起。如果另一个字段更新,我可以得到1。

mysqli_query

那么现在如何在我的情况下返回更新的行?

1 个答案:

答案 0 :(得分:1)

您的假设是正确的,因为第二个查询已经运行,这会产生不同的结果,所以最好的做法是将代码稍微重构为......

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行,我认为还可以。)

虽然我也建议查看预准备语句并绑定值,而不是直接将值放入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语句中更新的总行数相加。

相关问题