Я делаю запрос API Amazon mws и получаю детали заказа как xml/json, которые затем сохраняю в базе данных mysql.
Большая часть данных будет сохранена без каких-либо проблем, но для одного заголовка элемента появляется следующая ошибка:
PDOException: SQLSTATE [42000]: ошибка синтаксиса или нарушение доступа: 1064 У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с "Обувь и сандалии" (Black, Adult-M US (7 ~ 10)/EU (39 ~ 43)) ',' 0 ',' 0 ' ) 'в строке 2
PHP-код для вставки выглядит следующим образом:
foreach ($allorders as $orders){
$orderiddetail = $orders->amazonorderid;
// SET Paramater for API request
require("amazonListOrderItems.php");
$quantityordered = $orders['ListOrderItemsResult']['OrderItems']['OrderItem']['QuantityOrdered'];
$quanityshipped = $orders['ListOrderItemsResult']['OrderItems']['OrderItem']['QuantityShipped'];
$title = $orders['ListOrderItemsResult']['OrderItems']['OrderItem']['Title'];
$sellersku = $orders['ListOrderItemsResult']['OrderItems']['OrderItem']['SellerSKU'];
$asin = $orders['ListOrderItemsResult']['OrderItems']['OrderItem']['ASIN'];
// INSERT
try {
$statement = $pdo->prepare("INSERT INTO order_details(amazonorderid, asin, sellersku, title, quantityordered, quantityshipped)
VALUES ('$orderiddetail', '$asin', '$sellersku', '$title', '$quantityordered', '$quanityshipped')");
$statement->execute();
} catch (PDOException $e) {
if ($e->errorInfo[1] == 1062) {
$result = "Double entry";
} else {
echo $e;
break;
}
}
// INSERT END
};
Текст сообщения об ошибке - это переменная $ title, $ amountordered, $ quantityshipped.
Не могли бы вы рассказать мне, какие символы вызывают ошибку? Я использую одинарные кавычки (') для Вставки, поэтому я думал, что передняя косая черта (/) не должна быть проблемой? После того, как я проверил, я узнал, что тильда (~) является символом UTF8 и тоже не должна быть проблемой?
Как я уже сказал, вставка будет работать около 20 заказов, а затем остановится для этого одного заказа.
Мне удалось изменить его на подготовленные заявления, такие как @juergen-d. Большое спасибо. У меня были некоторые ошибки в отношении переменных, которые не могут быть NULL, поэтому я также создал некоторые, если variabel - это NULL-строки. Также слово "asin" представляется зарезервированным словом в php, поэтому я изменил его на asins.
foreach ($allorders as $orders){
$orderiddetail = $orders->amazonorderid;
// SET Paramater for API request
require("amazonListOrderItems.php");
$quantityordered = (int)$orders['ListOrderItemsResult']['OrderItems']['OrderItem']['QuantityOrdered'];
$quanityshipped = (int)$orders['ListOrderItemsResult']['OrderItems']['OrderItem']['QuantityShipped'];
$title = $orders['ListOrderItemsResult']['OrderItems']['OrderItem']['Title'];
if($title === NULL){
$title = "";
}
$sellersku = $orders['ListOrderItemsResult']['OrderItems']['OrderItem']['SellerSKU'];
if($sellersku === NULL){
$sellersku = "";
}
$asins = $orders['ListOrderItemsResult']['OrderItems']['OrderItem']['ASIN'];
if($asins === NULL){
$asins = "";
}
// INSERT
try {
$statement = $pdo->prepare("INSERT INTO order_details(amazonorderid, asins, sellersku, title, quantityordered, quantityshipped)
VALUES (:orderiddetail, :asins, :sellersku, :title, :quantityordered, :quanityshipped)");
$statement->bindValue(':orderiddetail', $orderiddetail, PDO::PARAM_STR);
$statement->bindValue(':asins', $asins, PDO::PARAM_STR);
$statement->bindValue(':sellersku', $sellersku, PDO::PARAM_STR);
$statement->bindValue(':title', $title, PDO::PARAM_STR);
$statement->bindValue(':quantityordered', $quantityordered, PDO::PARAM_INT);
$statement->bindValue(':quanityshipped', $quanityshipped, PDO::PARAM_INT);
$statement->execute();
} catch (PDOException $e) {
if ($e->errorInfo[1] == 1062) {
$result = "Double entry";
} else {
echo $e;
break;
}
}
// INSERT END
};
// END of foreach