0

我在使用QuickbaseAPI 执行以下操作时遇到问题:

SELECT 1, 2, 3 FROM table AA that has column BB = 1

foreach record {

Insert 1, 2, 3 into table ZZ.

}
function add_children($opportunity_id) {
    global $config;

$qbc = new QuickBase($_SESSION['qb_username'] , 
                     $_SESSION['qb_password'], 
                     true, 
                     $config['AA'], 
                     $config['debug'], 
                     $config['app_token']);
$xml = $qbc->do_query("{'" . $config['AA'] . "'.EX.''}", 0, 0, 'a', 0, '', '');


$records = array();
foreach($xml->record as $record) {
    $r = array();
    $r['record_id'] = $record->record_id_;
    $r['account_number'] = $record->account_number;
    $records[] = $r;

$xml = $qbc->add_record($records[]);
    }
}
4

1 回答 1

1

首先,我假设您使用的是 QuickbaseAdmirer https://github.com/QuickbaseAdmirer/QuickBase-PHP-SDK提供的 PHP SDK 。您的代码存在一些潜在问题。

  1. 仔细检查您的构造函数是否正确。除非您对其进行了修改,否则 SDK 中的 Quickbase 构造函数(我再次假设您正在使用)采用用户名、密码、xml、数据库 ID 和令牌的顺序。任何价值都$config['debug']可以作为令牌,价值$config['app_token']可以作为你的领域。此外,$config['AA']在构造函数中使用的应该是一串看似随机的字符,例如“bbqn1y5qv”。以下是 SDK 中的构造函数供参考:

    public function __construct($un, $pw, $usexml = true, $db = '', $token = '', $realm = '', $hours = '')

  2. 您的查询$xml = $qbc->do_query("{'" . $config['AA'] . "'.EX.''}", 0, 0, 'a', 0, '', '');没有返回任何记录,因为$config['AA']它们都被用作您的 DBID(在构造函数中)和查询中的字段 ID。DBID 必须是字符串,字段 ID 必须是与您要查询的字段相对应的整数。例如,如果您想返回今天创建的记录,您的查询将是'{1.IR.today}'因为 1 始终是创建日期的字段 ID。它也不会返回任何记录,因为 SDK 要求将查询作为数组传递。因此,我今天创建的记录查询需要重写为:

    $query= array( array( 'fid' => '1', 'ev' => 'IR'), 'cri' => 'today'), );

    您还需要将一串以句点分隔的值传递给方法的 clist 参数,或者将其留空以获取表默认值。例如,如果我想获取此表中所有记录的创建日期和记录 ID,按日期升序排序,我将使用以下命令:

    $query= array( array( 'fid' => '3', 'ev' => 'GT'), 'cri' => '0'), ); $xml = $qbc->do_query($query, '', '', '1.3', '1', '', 'sortorder-A');

    您可以阅读更多有关 Quickbase API 和 do_query 的信息,具体请参见 http://www.quickbase.com/api-guide/index.html#do_query.html

  3. 添加记录 API 调用采用成对的字段 ID 和值。SDK 通过使用带有 'fid' 和 'value' 对的数组来处理这个问题。假设您想将值$record->record_id_放在字段 #37 和$record->account_number字段 #30 中,您的代码应如下所示:

    foreach($xml->record as $record) { $records= array( array( 'fid' => '37', //Whatever field you want to store the value to 'value' => $record->record_id_), array( 'fid' => '30', 'value' => $record->account_number), ); $xml = $qbc->add_record($records); }

    最后输入 a print_r($xml);,您可以看到来自 Quickbase 的任何响应以进行调试。你应该得到这样的东西才能成功:

    SimpleXMLElement Object ( [action] => API_AddRecord [errcode] => 0 [errtext] => No error [rid] => 81 [update_id] => 1436476140453 )

  4. 您的代码呈现方式,您可能不会得到您期望的结果。您的 do 查询和添加记录方法调用是在同一张表上执行的,这通常不是人们想要的。通常,目标是对一个表执行 do 查询,然后使用该数据在不同的表中添加记录。如果是这种情况,您需要在$qbc执行添加记录调用之前更改对象中的数据库 ID。这很容易做到,$qbc->set_database_table('DBID');其中 DBID 是目标表 ID(应该是一串看起来像“bbqn1y5qv”的随机字符)。

祝你好运!

于 2015-07-17T17:47:12.667 回答