2016-08-25 7 views
0

У меня есть массив, содержащий объекты, и я хочу сохранить эти объекты в моей базе данных MySQL. Вначале он работал довольно хорошо, но внезапно он прекратил работу, даже если он не вносил никаких изменений в код или БД.Успех JS/PHP/MySQL, но не вставлен

Массив объекта выглядит следующим образом: var geocoded = [{zip: 1234, place: "XY", country: "XY", lat: "123.123", lng: "123.123"}, ...];

Я использую следующий код JS для итерации по массиву и после каждого объекта к БД. кайтер является итератором я использую и определяются как 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); 
?> 

Я использую ВСТАВИТЬ ИГНОРИРУЙТЕ потому дубликаты могут существовать, но обновление не требуется. Интересная часть состоит в том, что все работает довольно хорошо. Я также получаю Успех по каждому запросу, но ничего не сохраняется в БД.

+0

какая часть вашего кода терпит неудачу - sql или ajax/javascript? – RamRaider

+1

Вы открыты для SQL-инъекций и, во многих странах, zip/postcode ** не ** numeric, поэтому 'values ​​($ zip, '$ place',' вызовет проблему (без кавычек вокруг '$ zip') – CD001

+0

Вы протестировали его без ключевого слова 'IGNORE', просто проверьте его, если вы действительно добиваетесь успеха? Msd – devpro

ответ

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."')"; 
+0

Используйте 'IGNORE', как было предложено, и проверьте, чтобы сообщения были отправлены на эту страницу после отправки формы. Убедитесь, что вы поместили все элементы в ** **

**. –

+1

За исключением того факта, что вы теперь ставили '' 'знаки вокруг' $ zip', это не имеет абсолютно никакого значения: http://php.net/manual/en/language.types.string.php#language.types .string.syntax.double – CD001

+0

OP не получает синтаксическую ошибку MYSQL. – devpro

0

Я нашел решение сам. Проблема заключалась в данных, которые я хотел сохранить. Я обнаружил, что было название места, которое содержало '. Поэтому запрос не работал. После этого все работает нормально.

0

просто изменить ($zip, в запросе к ('$zip',

zip, вероятно, строка, и вы не передавая его в виде строки в запросе. Более того, этот код уязвим для SQL-инъекции. Пожалуйста, прочитайте об этом, чтобы избежать неуверенности.

+0

'$ zip' является числовым, поэтому нет необходимости в котировках –

Смежные вопросы