【问题标题】:Foreach Loop does not insert all records from quickbooks to MySQL database.Foreach 循环不会将 quickbooks 中的所有记录插入 MySQL 数据库。
【发布时间】:2017-04-10 08:43:04
【问题描述】:

我一直在研究 Quickbooks PHP API,我想从 Quickbooks 中获取数据并使用 PHP 脚本保存在 MYSQL 中。

我已经成功地将 Quickbooks 与 PHP 连接起来,并且我已经完成了查询以获取数据。

  $Products = $ProductsService->query($Context, $realm, "SELECT * FROM item ");
foreach ($Products as $Product)
 {
    //First, we will retrieve the ID, and strip out any spaces/characters.  
    $id = $Product->getId();
    $ProductID = preg_replace("/[^0-9]/","",$id);

    echo('Customer Id=' . $ProductID. '<br>');


    //// test for product name
    if(!empty($Product->getName())){
        $ProductName = $Product->getName();
    } else {
        $ProductName= '';
    }

    //Insert customer into product tables
    $sql = "INSERT INTO products (ProductID__kp, ProductName) 

        VALUES ('".$ProductID."', 
                '".$ProductName."'

                )
                ON DUPLICATE KEY 
                    UPDATE ProductName = '".$ProductName."' ";

    $conn->query($sql);

}

上述脚本成功运行并以数组形式返回结果。

问题是插入语句。我在快速手册中有 1579 种产品。但是当我运行上面的脚本时,MYSQL 数据库中只保存了 97 条记录。

我不知道为什么它只节省了 1579 个中的 97 个。

提前致谢。

【问题讨论】:

  • 您为什么发布代码/响应的屏幕截图而不是实际的代码/响应?您正在积极地让我们更难以回答,通过截取响应而不是仅仅复制/粘贴。你也在为自己做额外的工作。为什么?

标签: php mysql foreach sql-insert quickbooks-online


【解决方案1】:

这里实际上有两个不相关的问题:

QuickBooks Online API 默认一次只返回 100 条记录。

阅读文档:

您只能取回 100 条记录。你可以通过数组的大小来判断:

array(100)

您完全忽略了任何错误检查。

$conn-&gt;query($sql);

您为什么不注意并捕捉发生的任何错误?

然后您就会知道查询是否失败。

【讨论】:

    【解决方案2】:

    根据 Quickbooks 文档,如果您运行它,它将返回 100 条记录

    $Products = $ProductsService->query($Context, $realm, "SELECT * FROM item");
    

    相反,您可以使用MAXRESULTS。你可以看看下面这行代码。

    $Products = $ProductsService->query($Context, $realm, "SELECT * FROM item MAXRESULTS 9999");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-05
      • 2015-09-10
      • 2015-12-25
      • 1970-01-01
      • 2013-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多