我正在开发一个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
,但这会有效吗?
非常感谢任何见解。
谢谢!
答案 0 :(得分:1)
如果您想查看查询中的错误,可以检查-1
而不是0
。
如果mysqli_affected_rows
返回0
,则表示由于没有更改值或没有匹配的WHERE
条件而没有更新任何内容。如果您需要区分这两者,则可能需要执行额外的SELECT
查询。
并且您需要使用带有绑定变量的预准备语句来避免SQL注入问题。