Php 将xml中的字符串插入mysql是可行的,但有时会导致PDOException:SQLSTATE[42000]:语法错误或访问冲突:1064
我向AmazonMWSAPI发出请求,并以xml/json格式接收订单详细信息,然后将其保存到mysql数据库中 大部分数据都将保存,不会出现任何问题,但对于一个项目标题,我收到以下错误: PDOException:SQLSTATE[42000]:语法错误或访问冲突:1064 您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 近“黑色鞋和凉鞋,成人-美式7~10/EU 39~43”,“0”, 第2行的“0” 插入的php代码如下所示:Php 将xml中的字符串插入mysql是可行的,但有时会导致PDOException:SQLSTATE[42000]:语法错误或访问冲突:1064,php,mysql,sql,pdo,Php,Mysql,Sql,Pdo,我向AmazonMWSAPI发出请求,并以xml/json格式接收订单详细信息,然后将其保存到mysql数据库中 大部分数据都将保存,不会出现任何问题,但对于一个项目标题,我收到以下错误: PDOException:SQLSTATE[42000]:语法错误或访问冲突:1064 您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 近“黑色鞋和凉鞋,成人-美式7~10/EU 39~43”,“0”, 第2行的“0” 插入的php代码如下所示: foreach ($all
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
你能告诉我哪些字符导致了这个错误吗?我在插入中使用了单引号,这就是为什么我认为正斜杠/应该没有问题?
检查后,我发现tilde~是UTF8字符,应该也没问题吧
正如我所说,Insert将用于大约20个订单,然后停止用于这一个订单。我设法将其更改为@juergen-d said之类的准备好的语句。 非常感谢你。我有一些关于变量不允许为NULL的错误,这就是为什么我还设置了一些if variabel为NULL的行。而且单词asin在php中似乎是一个保留字,所以我将它改为asin
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
你需要逃避你的输入。最好是准备好的陈述。谢谢。那我需要再回去学习。我从来没有设法让它与准备好的声明一起工作。