2014-02-23 250 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