MySqli 真正的逃生不起作用


MySqli Real Escape Not Working

我一直在使用脚本将文章上传到我的网站并进行了一些维护,现在当我在服务器上添加文章时,它会在我的文本中添加斜杠。 这是我正在使用的代码:

$con = mysqli_connect("localhost","db_username","db_password","db_database");
$title = ucwords($_POST['title']);
$category = $_POST['category'];
$article = $_POST['article'];
$alt = $_POST['alt'];
$title = mysqli_real_escape_string($con, $title);
$article = mysqli_real_escape_string($con, $article);
$alt = mysqli_real_escape_string($con, $alt);
$insert_post_sql = "INSERT INTO ".$site_id."_articles (id, category, photo, alt, title, article, added, views) VALUES('$id', '$category', '.$extension', '$alt', '$title', '$article', '$added', '$views')";
$insert_post_res = mysqli_query($con, $insert_post_sql);
if(mysqli_affected_rows($con)>0){
move_uploaded_file($_FILES["photo"]["tmp_name"],"$path" . $id . "." . $extension);
header("Location: ../article.php?id=$id");
exit();
}
else{
echo "0";
};

所以我的文章文字看起来像这样:Here''s my article''s text

谁能告诉我为什么逃跑在这里不起作用?

谁能告诉我为什么逃跑在这里不起作用?

mysqli_real_escape_string()可能会按照您的要求进行"转义",但是"正在向我的文本添加斜杠"并不是mysqli_real_escape_string()所做的。不要指望它会修改代码或添加反斜杠。它只是在添加到数据库时转义字符。

除了mysqli_real_escape_string()之外,其他事情正在向文本添加斜杠。

mysqli_real_escape_string:

转义字符串中的特殊字符以在 SQL 语句中使用,同时考虑连接的当前字符集

.

当我在这里上传它时,它正在向文本添加斜杠,这就是它正在做的事情

如果您没有在脚本中手动编码以使用反斜杠进行转义,例如使用函数 addslashes(),那么正如@zerkms建议的那样,可能是您打开了魔术引号,它通过自动添加反斜杠来"做"转义。

确定是否启用了魔术引号

如果您启用了魔术引号,请阅读以下内容:为什么不使用魔术引号

编辑

使用stripslashes()的建议很可能会使这个问题"消失",但它并没有解决根本问题,也没有试图解决您使用魔术引号的潜在问题,再次为什么不使用魔术引号。

只需关闭魔术引号,以解决此问题,其他安全问题以及它已贬值的事实,您不应该在可能无法在较新的服务器或服务器更新上运行的代码中使用它。

如果您启用了魔术引号

,您现在正在浪费添加斜杠stripslashes()删除它们的魔术引号的资源。

这不是修复,而是"笨蛋"。
如果您对此感到满意,那么完全不用担心,但仅供参考,在我看来,这种方法根本不是好的做法。