0

我正在开发一个 PHP Web 应用程序,它允许用户编辑从数据库中获取的值。用户单击“编辑”链接,字段将填充数据库中表中的数据(如果有)。如果没有任何数据,则所有字段都显示为空白。

当用户单击“保存”时,表单被提交到 POST,并且这些值通过“更新”查询保存到数据库中。

我通过检查“受影响的行”来检查查询结果。如果它等于 0,那么更改没有通过,我告诉用户。

但是,当用户使用该行已经包含的完全相同的值进行更新时,我遇到了一个小问题。

例如,我有 A 行,其中 A、B、C、D 列的值分别为 1、2、3、4。

如果用户编辑该行并使用值 1、2、3、4 提交,则该行不会受到影响,并且我的输出消息会说当“更新”与以前完全相同并且刚刚通过时查询失败美好的。

现在我坚持输出:

“更新后的值与旧值相同,或者表和列名有问题。检查日志。”

我向日志发送有关此错误的消息。然后我输出查询,以便用户可以看到。

问题是,我希望我的程序在遇到错误时能够提供信息。有没有办法让程序对与最初的行完全相同的更新进行分类..成功?

        // construct query, execute query, check if any rows have been affected
    $query = "UPDATE table SET status='$status', client='$client' WHERE key='$key'";
    $result = $conn->query($query);
    if(mysqli_affected_rows($conn) === 0)
    {
        echo "Something went wrong. Entry not updated. Check the logs.\n";
        echo $query;
        error_log(mysqli_error($conn));
    }

我也考虑过只检查 if$result === false$result === trueif 条件,但这会起作用吗?

非常感谢任何见解。

谢谢!

4

1 回答 1

1

如果要检查查询是否有错误,可以检查-1而不是0.

如果mysqli_affected_rows返回0,则表示由于没有更改值或没有匹配WHERE条件,没有更新任何内容。如果您需要区分这两者,您可能需要进行额外的SELECT查询。

并且您需要使用带有绑定变量的准备好的语句来避免 sql 注入问题。

于 2012-11-16T17:04:16.467 回答