Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将xml中的字符串插入mysql是可行的,但有时会导致PDOException:SQLSTATE[42000]:语法错误或访问冲突:1064_Php_Mysql_Sql_Pdo - Fatal编程技术网

Php 将xml中的字符串插入mysql是可行的,但有时会导致PDOException:SQLSTATE[42000]:语法错误或访问冲突:1064

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

我向AmazonMWSAPI发出请求,并以xml/json格式接收订单详细信息,然后将其保存到mysql数据库中

大部分数据都将保存,不会出现任何问题,但对于一个项目标题,我收到以下错误:

PDOException:SQLSTATE[42000]:语法错误或访问冲突:1064 您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 近“黑色鞋和凉鞋,成人-美式7~10/EU 39~43”,“0”, 第2行的“0”

插入的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

你能告诉我哪些字符导致了这个错误吗?我在插入中使用了单引号,这就是为什么我认为正斜杠/应该没有问题? 检查后,我发现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

你需要逃避你的输入。最好是准备好的陈述。谢谢。那我需要再回去学习。我从来没有设法让它与准备好的声明一起工作。