PHP mysql使用更新进行真正的转义


PHP mysql real escape using update

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

`

我同意Liquorvicar的观点,PDO似乎让事情变得更容易。

我只是在学习PHP,但我相信你可以通过使用分隔符来转义双引号字符串中的'字符。此外,当我在自己的MySQL数据库上尝试此操作时,除非在变量周围使用双引号,否则查询不会起作用。参见工作代码:

$sql = "UPDATE Worklog SET Comments = '"$Comments'" WHERE id = '"$id'"";

您的代码看起来很好,如果您仍在使用mysql库,那么使用mysql_real_escape_string是很有用的。但是,请注意,我建议在将$id应用于SQL语句之前,先检查它是否为数字(带有is_numeric($id))。

此外,您还可以使用mysqli和PDO查看准备好的语句。使用准备好的语句的优点是MySQL注入的可能性较小(请注意,SQL注入是一个安全漏洞,而不仅仅是一个不便),并且您的SQL查询通常会更快(尤其是在重用查询时)。

说到转义,您真的应该转义<?php echo $_POST[x]; ?>的,因为如果"><script>alert('hai');</script>作为id或comment输入,这些可能仍然会导致一些问题。您应该使用htmlspecialchars逃离这些。

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