`mysql_real_eescape_string()`返回空的mysql字段


`mysql_real_escape_string()` returns empty MySql Fields

我有一个HTML联系人表单,允许用户在message输入字段中写他想要的任何内容。此表单使用AJAX发布,并在下面的PHP中进行处理。

我的问题是MySql表中有一个空行。

我只是想知道为什么$message = $_POST['message'];返回正确的值,而$message = mysql_real_escape_string($_POST['message']);返回空字符串

我在这里缺少什么

  //posted data   
  $firstName  = mysql_real_escape_string($_POST['firstName']);
  $lastName   = mysql_real_escape_string($_POST['lastName']);
  $name       = $firstName. ' ' .$lastName ;
  $email      = mysql_real_escape_string($_POST['email']);
  $phone      = mysql_real_escape_string($_POST['phone']);
  $subject    = mysql_real_escape_string($_POST['subject']);
  $hear       = mysql_real_escape_string($_POST['hear']);
  $message    = mysql_real_escape_string($_POST['message']);

  $db_server = mysql_connect($db_hostname, $db_username, $db_password)

  // Check if is Duplicates
  $query_usercheck = " select * from `test` where Name='$name' and Email='$email' and Phone='$phone' and Subject='$subject' and Message='$message' "; //matching all fields
  $usercheck = mysql_query($query_usercheck) or die(mysql_error());
  $row_usercheck = mysql_fetch_assoc($usercheck);
  $totalRows_usercheck = mysql_num_rows($usercheck);
  if ( $totalRows_usercheck > 0 ) {
        $duplicate = 'Yes';
  } else {
        $duplicate = 'No';
        //adding application data to MySql database
        $add = mysql_query("INSERT INTO `test` (`Date`, `Day`, `Time`, `Name`, `Email`, `Phone`, `Subject`, `From`, `Message`)
        VALUES ('$date','$day','$time','$name','$email','$phone','$subject','$hear','$message')");
  }
// close mysql
mysql_close();

问题是在执行mysql_real_escape_string之后连接到数据库。请先将连接移动到数据库,然后再转义变量。

更好的是,去掉不推荐使用的mysql_*函数(PHP7中甚至没有)!使用mysqli甚至更好:将PDO与准备好的语句一起使用,因为即使是mysql_real_escape_string也不安全。

mysql_real_escape_string需要一个活动的数据库连接才能完成其工作。您在调用时尚未建立连接。