php - 检查更新语句是否已经执行

标签 php mysql sql

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/

相关文章:

php - YML 验证文件被忽略

php - 带有 apache 虚拟主机的 Websocket

mysql - 选择最新日期(子查询)

java - 尝试通过 MySQL 正确保存/加载数组

java - CREATE TABLE 的 SQL 语法错误

php - 添加或更新 MySQL 记录而不总是更新 date_modified 列

sql - (SQFLite) 从 2 个连接表中检索数据并将结果查询转换为列表

php - 为什么 PHP 会针对这两种情况输出不同的错误消息?

mysql - 玩! & MariaDB - 使用 InnoDB 时索引到大 767 字节

php - AJAX 调用返回时图像不显示