Вставка строки из xml в mysql работает, но иногда приводит к PDOException: SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1064

0

Я делаю запрос 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 заказов, а затем остановится для этого одного заказа.

  • 2
    Вы должны избежать вашего ввода. Лучше всего с подготовленными заявлениями.
  • 0
    Спасибо. Я должен вернуться, чтобы учиться снова тогда. Мне никогда не удавалось заставить его работать с подготовленными заявлениями.
Теги:
pdo

1 ответ

1

Мне удалось изменить его на подготовленные заявления, такие как @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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню