MySQL_real_escape_string没有添加斜杠?

时间:2011-07-08 17:13:49

标签: php mysql string escaping

所以我这样做:

   <?php
    session_start();
    include("../loginconnect.php");
mysql_real_escape_string($_POST[int]);
    $int = nl2br($_POST[int]);
    $query = "UPDATE `DB`.`TABLE` SET `interests`='$int' WHERE `user`='$_SESSION[user]'";
    mysql_query($query) or die(mysql_error());
    mysql_close($con);
    ?>

让我们说$ _POST [int]是“Foo”吧。由于引用,单引号仍未转义并且在运行脚本时出现MySQL错误。怎么了?

3 个答案:

答案 0 :(得分:2)

m_r_e_s()RETURNS转义值,它不会修改原始值。

$int = mysql_real_escape_string($_POST['int']);

$query = "UPDATE ... interests = '$int' ...";

请注意,我在POST值的int周围添加了引号。如果没有引号,PHP会将其视为常量值(例如define())。如果它没有找到该名称的常量,则礼貌地假设您意味着使用字符串并相应地进行调整,但会发出警告。如果你做了

define('int', 'some totally wonky value');

之前,您将访问错误的POST值,因为PHP会将其视为$_POST[some totally wonky value]

答案 1 :(得分:2)

您没有在查询中使用mysql_real_escape_string的结果。 试着这样做:

$int = nl2br(mysql_real_escape_string($_POST[int]););

答案 2 :(得分:0)

  • 你应该使用准备好的陈述。它对mysql_ *函数有一点学习曲线,但从长远来看非常值得。
  • 你应该引用你的字符串,比如$ _POST ['int']而不是$ _POST [int]。
  • 在文件的顶部放入error_reporting(-1);