QuickBase foreach 插入
QuickBase foreach insert
我在使用 Quickbase
API 执行以下操作时遇到问题:
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[]);
}
}
首先,我假设您正在使用 QuickbaseAdmirer https://github.com/QuickbaseAdmirer/QuickBase-PHP-SDK 的 PHP SDK。您的代码存在一些潜在问题。
仔细检查您的构造函数是否正确。除非您修改了它,否则 SDK 中的 Quickbase 构造函数(同样我假设您正在使用)采用用户名、密码、xml、数据库 ID,然后依次是令牌。 $config['debug']
中的任何值都可以作为令牌,$config['app_token']
中的值可以作为您的领域。此外,构造函数中使用的 $config['AA']
应该是一串看似随机的字符,例如 "bbqn1y5qv"。 SDK中的构造函数供参考:
public function __construct($un, $pw, $usexml = true, $db = '', $token
= '', $realm = '', $hours = '')
您的查询 $xml = $qbc->do_query("{'" . $config['AA'] . "'.EX.''}", 0, 0, 'a', 0, '', '');
没有 returning 任何记录,因为 $config['AA']
被用作您的 DBID(在构造函数中)和您的字段 ID查询。 DBID 必须是一个字符串,字段 ID 必须是一个与您要查询的字段相对应的整数。例如,如果您想要 return 今天创建的记录,您的查询将是 '{1.IR.today}'
,因为 1 始终是创建日期的字段 ID。它也不会 returning 任何记录,因为 SDK 要求将查询作为数组数组传递。所以,我今天创建的记录查询需要重写为:
$query= array(
array(
'fid' => '1',
'ev' => 'IR'),
'cri' => 'today'),
);
您还需要将一串以句点分隔的值传递给该方法的 clist 参数,或者将其留空以获得 table 默认值。例如,如果我想获取此 table 中所有记录的创建日期和记录 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
添加记录 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 )
您的代码呈现方式可能无法获得您期望的结果。您的 do query 和 add record 方法调用是在同一个 table 上执行的,这通常不是某些人想要的。通常,目标是对一个 table 执行 do 查询,然后使用该数据在另一个 table 中添加记录。如果是这种情况,您需要在执行添加记录调用之前更改 $qbc
对象中的数据库 ID。这很容易用 $qbc->set_database_table('DBID');
完成,其中 DBID 是目标 table ID(应该是一串看似随机的字符,如 "bbqn1y5qv")。
祝你好运!
我在使用 Quickbase
API 执行以下操作时遇到问题:
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[]);
}
}
首先,我假设您正在使用 QuickbaseAdmirer https://github.com/QuickbaseAdmirer/QuickBase-PHP-SDK 的 PHP SDK。您的代码存在一些潜在问题。
仔细检查您的构造函数是否正确。除非您修改了它,否则 SDK 中的 Quickbase 构造函数(同样我假设您正在使用)采用用户名、密码、xml、数据库 ID,然后依次是令牌。
$config['debug']
中的任何值都可以作为令牌,$config['app_token']
中的值可以作为您的领域。此外,构造函数中使用的$config['AA']
应该是一串看似随机的字符,例如 "bbqn1y5qv"。 SDK中的构造函数供参考:public function __construct($un, $pw, $usexml = true, $db = '', $token = '', $realm = '', $hours = '')
您的查询
$xml = $qbc->do_query("{'" . $config['AA'] . "'.EX.''}", 0, 0, 'a', 0, '', '');
没有 returning 任何记录,因为$config['AA']
被用作您的 DBID(在构造函数中)和您的字段 ID查询。 DBID 必须是一个字符串,字段 ID 必须是一个与您要查询的字段相对应的整数。例如,如果您想要 return 今天创建的记录,您的查询将是'{1.IR.today}'
,因为 1 始终是创建日期的字段 ID。它也不会 returning 任何记录,因为 SDK 要求将查询作为数组数组传递。所以,我今天创建的记录查询需要重写为:$query= array( array( 'fid' => '1', 'ev' => 'IR'), 'cri' => 'today'), );
您还需要将一串以句点分隔的值传递给该方法的 clist 参数,或者将其留空以获得 table 默认值。例如,如果我想获取此 table 中所有记录的创建日期和记录 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
添加记录 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 )
您的代码呈现方式可能无法获得您期望的结果。您的 do query 和 add record 方法调用是在同一个 table 上执行的,这通常不是某些人想要的。通常,目标是对一个 table 执行 do 查询,然后使用该数据在另一个 table 中添加记录。如果是这种情况,您需要在执行添加记录调用之前更改
$qbc
对象中的数据库 ID。这很容易用$qbc->set_database_table('DBID');
完成,其中 DBID 是目标 table ID(应该是一串看似随机的字符,如 "bbqn1y5qv")。
祝你好运!