MySqli Real Escape无效

时间:2014-11-19 10:40:20

标签: php post mysqli mysql-real-escape-string

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

$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

有谁能告诉我为什么逃避不起作用?

1 个答案:

答案 0 :(得分:1)

  

谁能告诉我为什么逃避不在这里?

mysqli_real_escape_string()可能会根据需要执行“转义”,但“在我的文本中添加斜杠”不是mysqli_real_escape_string()确实。 不要指望它修改代码,或添加反斜杠。它只是在添加到数据库时逃避字符。

mysqli_real_escape_string()以外的其他内容正在为文本添加斜杠。

mysqli_real_escape_string:

  

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

  

当我在这里上传时,它会在文本中添加斜杠\它正在做什么

如果您没有在脚本中手动编码以使用反斜杠进行转义,例如使用函数addslashes(),那么正如@zerkms建议的那样,可能是您已启用magic quotes,这样做“ “通过自动添加反斜杠来逃避。

Determine if magic quotes are enabled

如果您启用了魔术引号,请阅读:Why not to use magic quotes

修改

使用stripslashes()的建议很可能会使这个问题“消失”,但它不会解决潜在的问题,也不会尝试再次使用魔法引号解决您的潜在问题{ {3}}。

Why not to use magic quotes,用于解决此问题,其他安全问题,以及它已被弃用的事实,您不应在代码中使用它,这些代码可能无法在较新的服务器或服务器更新中运行。< / p>

如果您启用了魔术引号,那么现在浪费资源来自魔术引号添加斜杠并stripslashes()删除它们。

这不是解决方案,而是“躲闪” 如果你对此感到满意,那么根本不用担心,但我认为这个方法根本就不是好的做法。