查询命令的致命错误

时间:2016-02-02 11:32:30

标签: php mysql

我有这部分PHP代码:

$indice_man = $html->find('div.man', 0);


            foreach($indice_man->find('div.block_results') as $e_trial_man) {

                foreach($e_trial_man->find('tr.line_results') as $result_man) {

                       $div_medal_man = $result_man->getElementByTagName('div');
                       $medal_man = explode(' ',$div_medal_man->getAttribute('class'));

                        $Trial = trim($e_trial_man->childNodes(0)->plaintext);
                        $Medal = $medal_man[1];
                        $Sex = male;
                        $Name = trim($result_man->find('td.name',0)->plaintext);
                        $Country = trim($result_man->find('td.country',0)->plaintext);

                    $sql = "INSERT INTO OlympicMedal (Olimpiade, Sport, Disciplina, Medaglia, Categoria, Atleta, Nazione) VALUES ('$Game', '$Sport', '$Trial','$Medal', '$Sex', '$Name','$Country')";

                   }

                }

我收到错误:

  

致命错误:在非对象[...]上调用成员函数getAttribute()

但是如果我在插入sql之前放置一个 echo $Medal 命令,它会正确打印,所以我认为getAttribute不是问题所在。 我想是关于此时的查询,我错在哪里?

的Fabio

3 个答案:

答案 0 :(得分:0)

在使用$div_medal_man之前,您需要使用支票$div_medal_man->getAttribute('class')。因为您需要知道$div_medal_man确实有getAttribute函数。

答案 1 :(得分:0)

检查$ div_medal_man。它可能是对象的集合或null。 http://php.net/manual/es/domdocument.getelementsbytagname.php#85182

答案 2 :(得分:0)

你在foreach循环中。所以你只为第一张唱片打印。您可以正确获得$Medal第一条记录。

但是你的一条记录在getAttribute对象中没有$div_medal_man函数。所以你需要检查以下条件。

使用method_exists

if(method_exists($div_medal_man, 'getAttribute')){
    $medal_man =  explode(' ',$div_medal_man->getAttribute('class'));              
 }else{
     $medal_man = '';   
 }

 $Medal = isset($medal_man) ? $medal_man[1] : 'no_value';

希望它对您有用:)