PHP mysql真正使用update进行转义

时间:2012-03-26 17:48:23

标签: php mysql

我正在使用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>

`

2 个答案:

答案 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来逃避这些。

编辑:答案并不完全符合这个问题。