php - 无法将返回的 API 请求插入数据库 - php

标签 php mysql xml multidimensional-array foreach

我当前遇到的错误:

Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'ac993f75-035b-433c-82e0-7b7a2d40802c' for key 'account_id''

我尝试插入到我的表中的 xml 数组如下,

SimpleXMLElement Object
(
    [PaymentID] => ddbbf5df-16d7-4f07-be3b-50102d015473
    [Date] => 2016-11-30T00:00:00
    [BankAmount] => 14.38
    [Amount] => 14.38
    [Reference] => manual
    [CurrencyRate] => 1.000000
    [PaymentType] => ACCRECPAYMENT
    [Status] => AUTHORISED
    [UpdatedDateUTC] => 2016-11-30T20:50:25.73
    [Account] => SimpleXMLElement Object
        (
            [AccountID] => ac993f75-035b-433c-82e0-7b7a2d40802c
            [Code] => 090
        )

    [Invoice] => SimpleXMLElement Object
        (
            [Contact] => SimpleXMLElement Object
                (
                    [ContactID] => 077866c9-462a-4713-9cc1-e75e3b4e29df
                    [ContactNumber] => SH-Customer-4236919494
                    [Name] => Joe Bloggs - 1
                )

            [CurrencyCode] => NZD
            [Type] => ACCREC
            [InvoiceID] => 2d06200d-69e7-488d-babb-db2664c09225
            [InvoiceNumber] => INV Order #1010
        )

)
SimpleXMLElement Object
(
    [PaymentID] => 1ea3b3ec-65a9-4fb8-8646-5376a6d2a6a3
    [Date] => 2016-11-30T00:00:00
    [BankAmount] => 14.38
    [Amount] => 14.38
    [Reference] => manual
    [CurrencyRate] => 1.000000
    [PaymentType] => ACCRECPAYMENT
    [Status] => AUTHORISED
    [UpdatedDateUTC] => 2016-11-30T20:50:28.007
    [Account] => SimpleXMLElement Object
        (
            [AccountID] => ac993f75-035b-433c-82e0-7b7a2d40802c
            [Code] => 090
        )

    [Invoice] => SimpleXMLElement Object
        (
            [Contact] => SimpleXMLElement Object
                (
                    [ContactID] => e00f1e33-84b8-4c52-9428-f4c606069740
                    [Name] => Shopify Customer - UnleashedCET
                )

            [CurrencyCode] => NZD
            [Type] => ACCREC
            [InvoiceID] => cf5c20f1-cf82-4c74-9cce-7df0b7689ed4
            [InvoiceNumber] => INV Order #1011
        )

)

我为此使用的函数如下:

function dataPayments ($array)
{
    $PDO = new PDO_connection();
    $pdo = $PDO->db_connection('test_db');
    $sql = $pdo->prepare('INSERT INTO db_xero_data_payments (
                      integration_id,
                      payment_id,
                      date,
                      bank_amount,
                      reference,
                      curreny_rate,
                      payment_type,
                      status,
                      updated_date,
                      account_id,
                      account_code,
                      contact_id,
                      contact_name,
                      currency_code,
                      type,
                      invoice_id,
                      invoice_number
                      )
                      VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)');

    foreach($array->Payments->Payment as $data)
    {
            $integration_id = "guid";
            $payment_id = $data->PaymentID;
            $date = $data->Date;
            $bank_amount = $data->BankAmount;
            $reference = $data->Reference;
            $curreny_rate = $data->CurrencyRate;
            $payment_type = $data->PaymentType;
            $status = $data->Status;
            $updated_date = $data->UpdatedDateUTC;
            $account_id = $data->Account->AccountID;
            $account_code = $data->Account->Code;
            $contact_id = $data->Invoice->Contact->ContactID;
            $contact_name = $data->Invoice->Contact->Name;
            $currency_code = $data->Invoice->CurrencyCode;
            $type = $data->Invoice->Type;
            $invoice_id = $data->Invoice->InvoiceID;
            $invoice_number = $data->Invoice->InvoiceNumber;

            $sql->execute([
                $integration_id,
                $payment_id,
                $date,
                $bank_amount,
                $reference,
                $curreny_rate,
                $payment_type,
                $status,
                $updated_date,
                $account_id,
                $account_code,
                $contact_id,
                $contact_name,
                $currency_code,
                $type,
                $invoice_id,
                $invoice_number
            ]);
    }

我不确定正确的循环结构,以便循环遍历数据字段并从一个数组移动到下一个数组,有人可以帮助我吗?

最佳答案

请检查您的表结构。

对于键“account_id”。可能它被设置为主键或唯一键。所以这是违反约束的。我们尝试加载具有相同 account_id 的记录。

关于php - 无法将返回的 API 请求插入数据库 - php,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44093804/

相关文章:

php - PHP 中的算法基准测试毫无意义吗?

MYSQL:外键可以包含一个集合吗?

php - Mysql 错误,无法输入数据。未选择数据库

java - 使用 JDOM 修改 XML

c# - XMLReader读取属性

php - paypal rest api执行错误

php - 无法在 Laravel 5 中将 Carbon 日期设置为 null

javascript - 页面加载后加载JS代码

mysql - 如何连接两个mysql表两次

Java - 向 WebSphere 消息代理发送消息并更改我的消息