(1)过滤天蓝色表存储和(2)捕获错误

时间:2014-06-20 10:31:46

标签: php azure azure-table-storage

我有一个azure表存储,其中包含一些实体。放置新实体是没有问题的。更新现有实体也没有问题,一切正常。

以下代码挂起:$result = $tableClient->retrieveEntities('users',"Name eq 'John Doe'",'partition1');(位于底部的某处)它提供了 http 500错误

require_once("Microsoft/WindowsAzure/Storage/Table.php");
require_once("Microsoft/WindowsAzure/Storage/DynamicTableEntity.php");

$accountName = '***';
$accountKey = '*****';
$tableClient = new Microsoft_WindowsAzure_Storage_Table('table.core.windows.net',$accountName,$accountKey); 
$tableClient->createTableIfNotExists('users');

$result = $tableClient->listTables();
foreach ($result as $table){
    echo 'Table name is: ' . $table->Name . "\r\n<br />";
}
function setUser($accountName,$accountKey,$partitionName,$data) {
    $tableClient = new Microsoft_WindowsAzure_Storage_Table('table.core.windows.net',$accountName,$accountKey);
    $update = false;
    if(isset($data['ID']) && $entity = $tableClient->retrieveEntityById('users',$partitionName,$data['ID'])){
        $update = true;
        unset($data['ID']);
    } else {
        $guid = substr(com_create_guid(),1,32);
        $entity = new Microsoft_WindowsAzure_Storage_DynamicTableEntity($partitionName, $guid);
        $entity->ID = $guid;
    }

    $keys = array_keys($data);
    foreach($keys as $key){
        $entity->$key = $data[$key];
    }       
    if($update){
        $tableClient->updateEntity('users',$entity,true);
    } else {
        $tableClient->insertEntity('users',$entity);
    }
}   
setUser($accountName,$accountKey,'partition1',array(Name => 'John Doe',Email => 'johndoe@gmail.com',Time => time()));



$result = $tableClient->retrieveEntities('users',"Name eq 'John Doe'",'partition1');
//$result = $tableClient->retrieveEntities('users');




foreach($result as $data) {
    echo $data->ID;
    echo ' - ';
    echo $data->Name;
    echo ' - ';
    echo $data->Email;
    echo ' - ';
    echo $data->Time;
    echo '<br />';
}

我想知道的是;

  1. 我对滤波器参数的错误是什么? (当我用过滤器注释掉行并取消注释下面的行时,它工作正常)。

  2. 如何捕获此错误(以及其他类似错误),我尝试了try {} catch {},但这无效。它导致了相同的HTTP 500错误。

  3. try-catch - 代码:

    try {
        $result = $tableClient->retrieveEntities('users',"Name eq 'John Doe'",'partition1');
    } catch (Microsoft_WindowsAzure_Exception $e) {
        echo 'Caught exception: '.$e->getMessage();
    }
    

1 个答案:

答案 0 :(得分:1)

只是疯狂猜测(所以我可能错了) - 我在这里查看了检索实体的代码:https://github.com/Daniel15/AjaXplorer-Azure/blob/master/azuresdk/Microsoft/WindowsAzure/Storage/Table.php(希望我看到正确的地方)并注意到你正在通过{ {1}}作为该方法的参数之一。

这会导致问题吗?尝试类似:

partition1

我还查看了CodePlex上的项目页面(http://phpazure.codeplex.com/),并提到该项目已被弃用,转而支持Github上的Azure SDK(https://github.com/Azure/azure-sdk-for-php)。恕我直言,可能值得投入一些时间来移植您的应用程序以使用新的SDK。只是一个想法。