我有一个包含对象的数组,我想将这些对象存储到我的MySQL DB中。一开始它工作得很好,但突然它停止了工作,即使它没有对代码或DB进行任何更改。
对象数组如下所示:var geocoded = [{zip: 1234, place: "XY", country: "XY", lat: "123.123", lng: "123.123"}, ...];
我使用以下JS代码遍历数组并将每个对象发布到DB。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是因为可能存在重复项,但不需要更新。有趣的是,每件事都运行得很好,我也会在每次查询时都获得成功,但没有任何东西存储到数据库中。
发布于 2016-08-25 20:46:34
插入查询你必须像这样改变。您漏掉了值的引号
替换
$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."')";发布于 2016-08-25 21:25:25
我自己找到了解决方案。问题出在我想存储的数据中。我发现有一个包含'的地名。因此,查询不起作用。删除它后,一切工作正常。
发布于 2016-08-25 21:31:11
只需将查询中的($zip,更改为('$zip',
zip可能是字符串,而您在查询中没有将其作为字符串传递。此外,此代码容易受到SQL注入的攻击。请阅读它,以避免不安全感。
https://stackoverflow.com/questions/39145629
复制相似问题