2012-09-13 78 views
3

可能重复:
mysql_fetch_array() expects parameter 1 to be resource, boolean given in selectPHP的警告:mysql_fetch_array()预计参数1是资源,布尔给

它引用该生产线是其中mysql_fetch_array()函数被调用就行了。查询通过phpmyadmin运行正常。它也不会引发错误。任何帮助,将不胜感激。

$query = "select distinct s.time, s.parameter, s.data, t.units from alertData as s, parameters as t where s.parameter like '%Airtemp_Avg%' and s.staID = 'WS_001_UHC' and s.interval_min = 15 and t.parameter like '%Airtemp_Avg%' and unix_timestamp(s.time) >= (unix_timestamp(now()) - 86400) order by time desc"; 
$results = mysql_query($query) || die(mysql_error()); 
$dataCnt = 0; 
while($info = mysql_fetch_array($results)) { 
    //15 Min data 
    if(($dataCnt == 0) && (getTimestamp($info['time']) >= ($now - 4500))) 
     $data15['temp'] = $info['data']; 
    else 
     $data15['temp'] = '-'; 

    $dataCnt++; 
} 
+0

'的var_dump($结果,mysql_error());' – zerkms

+1

题外话,但很重要:请注意PHP强烈建议不要使用'mysql_xx()'函数。这些功能被认为是过时的,不再维护。他们建议切换到较新的'mysqli_xx()'函数或PDO库。 – Spudley

回答

0
if ($results) { while... 

确保你确实有结果

+0

不,它没有任何意义。没有答案。 '$ results'是一个资源。资源总是转换为'true' – zerkms

+0

mysql_query在出现错误时返回false – SparK

2

mysql_query()后删除|| die (mysql_error())。它被评估为一个布尔,这是导致错误。

编辑:

由于bfavaretto指出,你可以使用OR来代替。它只是PHP的另一个不一致之处。在PHP Documentation about Logical Operators中查看更多关于它的内容(查看第一个代码示例的注释)。

+1

更好的是,使用'OR die(mysql_error())'代替。 – bfavaretto

+0

当死亡执行时,你不会看到其余的代码,所以...不,这不是它 – SparK

+0

@SparK是啊我现在想到了。我愚蠢。 bfavaretto:同样的事情。 :P – vanneto

1

如果出现错误,$ results将返回false。

使用这样的检查结果:

if (false === $result) { 
echo mysql_error(); 
} 

此外,mysql_函数不推荐,并且被弃用。改为使用PDO或MySQLi。

0

我相信你的SQL查询有问题,检查表名和列名是否正确,检查你是否有连接到数据库,还有bfavaretto说用or die(mysql_error())代替。

我不是100%肯定,但不应该查询是:

$query = "select distinct s.time, s.parameter, s.data, t.units as s, parameters as t from alertData where s.parameter like '%Airtemp_Avg%' and s.staID = 'WS_001_UHC' and s.interval_min = 15 and t.parameter like '%Airtemp_Avg%' and unix_timestamp(s.time) >= (unix_timestamp(now()) - 86400) order by time desc"; 

,而不是

$query = "select distinct s.time, s.parameter, s.data, t.units from alertData as s, parameters as t where s.parameter like '%Airtemp_Avg%' and s.staID = 'WS_001_UHC' and s.interval_min = 15 and t.parameter like '%Airtemp_Avg%' and unix_timestamp(s.time) >= (unix_timestamp(now()) - 86400) order by time desc"; 
相关问题