我有一个包含对象的数组,我想将这些对象存储到我的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,因为可能存在重复项,但不需要更新。 有趣的是,一切都很好用我在每个查询中都获得了成功,但没有任何内容存储到数据库中。
答案 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注入攻击。请阅读它以避免不安全感。