我一直在尝试将移动应用程序与SimpleDB集成,在测试Select响应是否为空时遇到问题。我不是一个OO PHP程序员,在浏览代码时会感到困惑。
以下是获取我需要的所有物品的相关代码:
foreach ($duuids as $duuid) {
$results = null;
$select_expression = "SELECT * FROM `thestore` WHERE thing IS NOT NULL AND duuid='" . $duuid . "' ORDER BY thing DESC LIMIT 100";
$next_token = null;
do {
if ($next_token)
{
$results = $sdb->select($select_expression, array(
'NextToken' => $next_token,
));
}
else
{
$results = $sdb->select($select_expression);
}
foreach ($results->body->Item() as $item) {
array_push($items, $item);
}
$next_token = isset($results->body->SelectResult->NextToken)
? (string) $results->body->SelectResult->NextToken
: null;
}
while ($next_token);
}
我的问题是,有时duuid还没有上传任何数据,所以结果集是空的,这会破坏上面的"foreach($results->body->Item()as$Item)"。
根据SDK文档,select()返回一个CFResponse,其中$results->body是一个SimpleXML文档。我尝试过一些方法来计算SimpleXML文档中的子对象,如"$results->body->SelectResult->count()",但似乎不起作用。
问题:
测试这个结果是否为空的合适方法是什么?
试试这个:
if($results->body->SelectResult->Item()){
// process the children
}
您可能认为count()
函数可以正常工作,但它似乎没有做正确的事情。奇怪的是。。。
我不是PHP程序员,但可以给你一些想法——
- 您可以检查属性映射的大小
选择结果>>获取项目>>检查属性MAP 的大小
- 您可以检查select结果是否为null(不确认是否会发生)