簡體   English   中英

從xml插入字符串到mysql可以,但是有時會導致PDOException:SQLSTATE [42000]:語法錯誤或訪問沖突:1064

[英]Inserting String from xml into mysql works, but sometimes results in PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064

我向Amazon mws API發出請求,並以xml / json形式接收訂單詳細信息,然后將其保存到mysql數據庫中。

大多數數據將被保存,沒有任何問題,但是對於一項標題,我收到以下錯誤:

PDOException:SQLSTATE [42000]:語法錯誤或訪問沖突:1064 SQL語法錯誤; 查看與您的MySQL服務器版本相對應的手冊以獲取正確的語法,以在“鞋子和涼鞋(黑色,成人-M美國(7〜10)/歐盟(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,$ quantityordered和$ 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM