MySQL用户使用现有数据更新行

时间:2012-11-16 16:52:07

标签: php mysql sql-update

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

当用户点击“保存”时,表单将提交给POST,并使用“UPDATE”查询将这些值保存到数据库中。

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

但是,当用户使用与行已包含的完全相同的值进行更新时,我会遇到一些问题。

例如, 我有一行,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 === true,但这会有效吗?

非常感谢任何见解。

谢谢!

1 个答案:

答案 0 :(得分:1)

如果您想查看查询中的错误,可以检查-1而不是0

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

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