2014-06-20 39 views
0

我有一個天藍色的表格存儲,其中包含一些實體。投入新的實體是沒有問題的。更新現有的實體也沒有問題,一切正常。(1)在天藍色表格存儲過濾器和(2)捕獲錯誤

以下代碼掛起行:$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 => '[email protected]',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. 如何捕獲此錯誤(和其他類似錯誤),我嘗試了{} catch {},但那不起作用。它導致相同的HTTP 500錯誤。

的try-catch - 代碼:

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

一種無關的評論,但有沒有一個特別的原因,你不使用微軟的官方PHP SDK:https://github.com/Azure/azure-sdk-for-php? –

+0

我使用的是Microsoft的官方PHP SDK,但我認爲它是舊版本?之前,我用它來進行正常的blob存儲,這在當時效果很好。我可以嘗試你指向的SDK,誰知道這解決了我的問題,但是我回到了0.如果有人看到我做錯了,那將會很好。 – Jeroen

+1

只是採取瘋狂的猜測(所以我可能是錯的) - 我在這裏查看檢索實體的代碼:https://github.com/Daniel15/AjaXplorer-Azure/blob/master/azuresdk/Microsoft/WindowsAzure/Storage/ Table.php#L469(希望我正在尋找正確的位置),並注意到您將'partition1'作爲該方法的參數之一。那可能會導致問題。嘗試類似'$ tableClient-> retrieveEntities('users','PartitionKey eq'partition1'和Name eq'John Doe'「)'看看是否解決了這個問題。 –

回答

1

只是瞎猜(所以我可能是錯的) - 我看了一下代碼在這裏找回實體:https://github.com/Daniel15/AjaXplorer-Azure/blob/master/azuresdk/Microsoft/WindowsAzure/Storage/Table.php(希望我在看正確的地方),並注意到你通過partition1作爲該方法的參數之一。

這可能是導致問題?嘗試是這樣的:

$tableClient->retrieveEntities('users',"PartitionKey eq 'partition1' and Name eq 'John Doe'") 

我也看了一下項目的頁面在CodePlex上(http://phpazure.codeplex.com/),並且提到了這個項目有利於Azure的SDK中被廢棄在Github上(https://github.com/Azure/azure-sdk-for-php)。恕我直言,可能需要投入一些時間來移植您的應用程序以使用新的SDK。只是一個想法。

相關問題