![](/img/trans.png)
[英]PDOException SQLSTATE[42000]: Syntax error or access violation: 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.