mysql没有插入[&](AND)字符

时间:2013-03-22 22:14:54

标签: php mysql ajax variables character-encoding

我有一个自动发送数据到php的ajax脚本,所以我可以将它存储在mysql中。除了某些东西,脚本工作正常。我可以将数据插入mysql,但如果数据包含(&)[和]字符,则会存储[&]之前的数据,而不会存储[&]之后的数据。
这是一个例子: 我的数据是:----> '这是一只猫和一只猫一只狗'。 Mysql将存储“这是一只猫”并忽略'&一只狗' 这是我的代码:它不是pdo或mysqli。我很快就会改变它!

<?php 
//connect to db
$con = mysql_connect("localhost","root","");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }
//select db
mysql_select_db("database", $con);

//get post variables from ajax
$link = $_POST['var1'];
$name = $_POST['var2'];
$size = $_POST['var2'];
$cat = $_POST['var4'];




//safe from sql injections
$link = mysql_real_escape_string($link);
$name = mysql_real_escape_string($name);
$size = mysql_real_escape_string($size);
$cat = mysql_real_escape_string($cat);




//verify url existance
if (!preg_match("(^https://example\.com(.*))", $link)) {
    //not valid url
    mysql_close($con);
    exit();
}

//check if result already exist
$check = mysql_query("SELECT link FROM links WHERE  link = '{$link}';");

if (mysql_num_rows($check) == 0) {
    // insert if not exist

    $sql="INSERT INTO links (link, name, size, category) VALUES ('$link','$name','$size','$cat')";
    if (!mysql_query($sql,$con))
      {
      die('Error: ' . mysql_error());
      }

    mysql_close($con);
}



?>

1 个答案:

答案 0 :(得分:2)

这听起来不像服务器端的任何问题,而是如何在客户端上发出请求。但是你没有告诉我们。您需要对字符串中的encodeURIComponent使用作为ajax请求一部分的&符号,否则&将被视为单独的参数。这在PHP端自动解码。