我正在开发一个PHP Web应用程序,该应用程序允许用户编辑从数据库抓取的值。用户点击“编辑”链接,并使用数据库表中的数据填充字段(如果有的话)。如果没有任何数据,则所有字段都显示为空白。MySQL用户使用现有数据更新行
当用户点击'保存'时,表单被提交到POST,并且这些值通过“UPDATE”查询保存到数据库。
我通过检查“受影响的行”来检查查询的结果。如果它等于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));
}
我也想过,如果条件中,如果$result === false
或$result === true
只是检查,而是将这项工作?
任何洞察力,非常感谢。
谢谢!
由于您正在使用'mysqli',您必须**必须利用[SQL占位符工具](http://php.net/manual/en/mysqli-stmt.prepare.php)避免严重的[SQL注入漏洞](http://bobby-tables.com/php)。你永远不应该将用户变量插入到你的查询字符串中。这只是一条线路,它可以让您免于极其尴尬的事情,如果不是事业的破坏性事件。 – tadman
@tadman感谢您的建议。我是PHP的新手,所以当人们发布链接供我学习时,它非常有用。 –
@tadman正是我应该如何处理我的查询和输入?我使用mysqli_real_escape_string过滤了输入,但是我也应该在执行它们之前绑定变量并准备语句,对吗? :) –