我正在使用Real Escape String来阻止像`引发SQL错误这样的字符。 这是我的代码的一部分,它应该从表单更新。我需要帮助找出如何使用更新来执行转义字符串。
$Comments = mysql_real_escape_string($_POST['Comments']);
$id = mysql_real_escape_string($_POST['id']);
$sql="UPDATE Worklog SET Comments = '$Comments' WHERE id = '$id'";
mysql_query($sql);
<form action="comments.php?id=<?php echo $stuff['id'];?>" method="post">
<br />
Comments: <br />
<textarea name="Comments" method="post" cols="20" rows="5" wrap="hard"><?php echo $stuff['Comments']; ?></textarea> <br />
<br />
<input type="submit" name="makeitgos" />
<br />
<br />
</form>
</body>
</html>
`
答案 0 :(得分:0)
我同意Liquorvicar的观点,PDO似乎让事情变得更容易。
我只是学习PHP,但我相信你可以通过使用分隔符来转义双引号字符串中的'字符。此外,当我在我自己的MySQL数据库上尝试这个时,查询不起作用,除非我在变量周围使用双引号。见工作代码:
$sql = "UPDATE Worklog SET Comments = \"$Comments\" WHERE id = \"$id\"";
答案 1 :(得分:-2)
您的代码看起来很好,如果您仍在使用mysql库,则使用mysql_real_escape_string
非常有用。但请注意,在将其应用于SQL语句之前,我建议检查$id
是否为数字(带is_numeric($id)
)。
此外,您可以使用prepared statements和PDO查看mysqli。使用预准备语句的优点是MySQL注入的可能性较小(注意SQL注入安全漏洞,而不仅仅是不方便),并且SQL查询通常会更快(尤其是在重用查询时)。
说到逃避,你应该真正逃避<?php echo $_POST[x]; ?>
,因为如果"><script>alert('hai');</script>
作为id或注释输入,这些可能仍然会导致一些问题。你应该使用htmlspecialchars
来逃避这些。
编辑:答案并不完全符合这个问题。