【问题标题】:YQL Query Returning ErrorsYQL 查询返回错误
【发布时间】:2014-02-23 21:36:59
【问题描述】:

所以我一直在做一个学校项目,并获得了这个网站的代码,有时它可以工作,但有时它会返回错误:

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> 

我想知道是否有人对我如何永久解决问题或进行某种错误处理有一些建议。我是新手,所以任何帮助都会很棒。谢谢!

【问题讨论】:

    标签: php yql yahoo-finance


    【解决方案1】:

    如果您提供的代码是整个 getdata.php 文件,那么有问题的行是:

    • l.27:$symbol = $result-&gt;query-&gt;results-&gt;quote-&gt;symbol;
    • l.39:$Ask = $result-&gt;query-&gt;results-&gt;quote-&gt;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
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-25
      相关资源
      最近更新 更多