首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QuickBase前缘插入

QuickBase前缘插入
EN

Stack Overflow用户
提问于 2015-07-13 14:55:51
回答 1查看 396关注 0票数 0

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

代码语言:javascript
复制
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[]);
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-17 17:47:12

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

  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的内容,特别是do_query,这里是query.html
  3. add record 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); } 在最后加上一个print_r($xml);,您可以看到来自Quickbase的任何用于调试的响应。为了成功,你应该得到这样的东西: SimpleXMLElement Object ( [action] => API_AddRecord [errcode] => 0 [errtext] => No error [rid] => 81 [update_id] => 1436476140453 )
  4. 按照代码的显示方式,您可能无法得到预期的结果。您的do查询和添加记录方法调用是在同一个表上执行的,这通常不是某人想要的。通常,目标是对一个表执行do查询,然后使用该数据在另一个表中添加记录。如果是这样的话,您需要在预置add调用之前更改$qbc对象中的数据库ID。这在$qbc->set_database_table('DBID');中很容易做到,其中DBID是目标表ID (它应该是一串看起来像“bbqn1y5qv”这样的随机字符)。

祝你好运!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31386733

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档