2014-02-23 247 views
1

所以我一直在一個學校項目,並已經得到了驗證碼的網站,有時工作,但其他時候,它會返回錯誤:YQL查詢返回錯誤

Notice: Trying to get property of non-object in C:\xampp\htdocs\schoolproj\getdata.php on line 27 

Notice: Trying to get property of non-object in C:\xampp\htdocs\schoolproj\getdata.php on line 27 
Ask 
Notice: Trying to get property of non-object in C:\xampp\htdocs\schoolproj\getdata.php on line 39 

Notice: Trying to get property of non-object in C:\xampp\htdocs\schoolproj\getdata.php on line 39 

的PHP代碼:

<html> 
<body> 

    <?php echo $_POST['name']; ?>!<br> 


<?php 

$endpoint = "http://query.yahooapis.com/v1/public/yql"; 

$ticker = "'".$_POST["ticker"]."'"; 
$query = urlencode("env 'store://datatables.org/alltableswithkeys';select * from yahoo.finance.quotes where symbol in (".$ticker.")"); 
$ch = curl_init($endpoint.'?q='.$query. '&format=json'); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$result = curl_exec($ch); 

if (curl_error($ch)){ 
    die(curl_error($ch)); 
} 
curl_close($ch); 

//echo'<pre>'; 

$result = json_decode($result); 


$symbol = $result->query->results->quote->symbol; 
print_r($symbol); 




?> 

Ask 

<?php 

$Ask = $result->query->results->quote->Ask; 
print_r($Ask); 

?> 

</body> 
</html> 

我想知道是否有人對我如何永久解決問題或進行某種錯誤處理有一些建議。我對此很陌生,所以任何幫助都會很棒。謝謝!

回答

1

有問題的行,如果你給的代碼是整個getdata.php文件是:

  • 1.27:$symbol = $result->query->results->quote->symbol;
  • L.39:$Ask = $result->query->results->quote->Ask;

和錯誤是告訴你在這一點上,你正在訪問一個不是對象的屬性。

考慮到你有時說它有時工作,有時候並不存在,可能是你的查詢(取決於你的輸入)或datatables.org有偶爾的錯誤(參見this old question on developer.yahoo這表明查詢會失敗datatables.org不響應)。

然後,如果出現錯誤,您收到的json將具有類似於下面的結構(這是我在嘗試代碼時最初發生的錯誤,因爲我忘記將引號括起來)。

{ 
    "error": { 
     "lang":"en-US", 
     "description":"Query syntax error(s) [line 1:95 mismatched input 'in' expecting ISNOTNULL]" 
    } 
} 

在這個結果,你沒有query屬性,因此,當您嘗試訪問它失敗。然後,您應該首先檢查是否有錯誤(查找error屬性),並且只有在沒有嘗試並訪問查詢結果的情況下。

要檢查錯誤,你可以使用類似

if (property_exists($result, "error")) { 
    // your error handling 
} else { 
    // your current code accessing the results 
} 
+0

股票在引號,謝謝! – Timeless