JS / PHP / MySQL成功但未插入

时间:2016-08-25 12:41:35

标签: javascript php mysql

我有一个包含对象的数组,我想将这些对象存储到我的MySQL数据库中。一开始它工作得很好,但突然它停止工作,即使它没有对代码或数据库进行任何更改。

对象数组如下所示:var geocoded = [{zip: 1234, place: "XY", country: "XY", lat: "123.123", lng: "123.123"}, ...];

我使用以下JS代码迭代数组并将每个对象发布到数据库。 kiter是我使用的迭代器,定义为geocoded.length - 1

function postPlaces(data, kiter) {

  if (kiter >= 0) {
    $.post("api/placessave.php", 
      data[kiter],
      function(data, status){
        kiter--;
        postPlaces(geocoded, kiter);
        console.log(data + '.............' + status);
      }
    );
  } else {
        //statusUpdate(id);
  }
}

placessave.php如下所示:

<?php
 define('HOST','localhost');
 define('USERNAME', 'root');
 define('PASSWORD','*****');
 define('DB','****');

 $con = mysqli_connect(HOST,USERNAME,PASSWORD,DB);

 $zip = $_POST['zip'];
 $place = $_POST['place'];
 $country = $_POST['country'];
 $lat = $_POST['lat'];
 $lng = $_POST['lng'];

 $sql = "insert ignore into places (zip, place, country, lat, lng) values ($zip, '$place', '$country', '$lat', '$lng')";

 if(mysqli_query($con, $sql)){
 echo "success";
 }

 mysqli_close($con);
?>

我使用INSERT IGNORE,因为可能存在重复项,但不需要更新。 有趣的是,一切都很好用我在每个查询中都获得了成功,但没有任何内容存储到数据库中。

3 个答案:

答案 0 :(得分:0)

插入查询您必须像这样更改。您在值

附近错过了引号

替换

$sql = "insert ignore into places (zip, place, country, lat, lng) values ($zip, '$place', '$country', '$lat', '$lng')";

使用

$sql = "insert ignore into places (zip, place, country, lat, lng) values ('".$zip."', '".$place."', '".$country."', '".$lat."', '".$lng."')";

答案 1 :(得分:0)

我自己找到了解决方案。问题出在我想存储的数据中。我发现有一个地名包含'。因此查询不起作用。删除后,一切正常。

答案 2 :(得分:0)

只需将查询中的($zip,更改为('$zip',

即可

zip可能是字符串,您不会在查询中将其作为字符串传递。此外,此代码易受SQL注入攻击。请阅读它以避免不安全感。