Foreach无效参数

时间:2012-11-04 19:54:40

标签: php foreach mysqli

我正在创建一个搜索功能,允许用户最初通过邮政编码在我的数据库中搜索房屋。该函数可以在下面看到,当函数执行并找到一个真正的语句时我没有错误但是当我执行搜索时我得到一个没有字段被返回我留下了这个错误:

   No Records Found
   Warning: Invalid argument supplied for foreach() in /Applications/XAMPP/xamppfiles/htdocs/undergradpad/search.php on line 26 

我希望它显示No Records Found但是我不知道如何纠正上述错误。

的search.php:

<table width="500" border="1" cellpadding="5">
<tr>
<th width="16" scope="row">id</th>
<td width="95">bedrooms</td>
<td width="140">description</td>
<td width="104">roadname</td>
 <td width="71">postcode</td>
</tr>


<?php
    require("classes/class.House.inc");

    $obj = new House();
    $obj->search($_POST['term']);
    foreach($obj->data as $val){
    extract($val);
?>

<tr>
<td scope="row"><?php echo $id; ?></td>
<td><?php echo $bedrooms; ?></td>
<td><?php echo $description; ?></td>
<td><?php echo $roadname; ?></td>
<td><?php echo $postcode; ?></td>
</tr>
<?php
}
?>
</table>

类/ class.House.inc:

 <?php 
 include("connect/class.Database.inc");

 class House extends Database {


    public function read(){

            $query = "SELECT * FROM houses";

            $result = $this->mysqli->query($query);

            $num_result = $result->num_rows;    
            if($num_result > 0){
                while($rows =$result->fetch_assoc()){               
                    $this->data[]=$rows;
                    //print_r($rows);
                }           
                return $this->data;
            }
    }

    public function search ($term){

                    $query = "SELECT * FROM houses WHERE postcode like '%".$this->mysqli->real_escape_string($term)."%'";
                    $result = $this->mysqli->query($query);


                    $num_result = $result->num_rows;

                    if($num_result > 0){
                        while($rows =$result->fetch_assoc()){               
                            $this->data[]=$rows;
                            //print_r($rows);
                        }           
                        return $this->data;
                    } else{
                     echo 'No Records Found';    
                        }
    }
 }
 ?>

3 个答案:

答案 0 :(得分:1)

在这个变量($ obj-&gt;数据)中你只得到空数据。

首先检查是否为空并且使用foreach并且如果方法不返回空数据则没有错误

只检查是否(!空($ obj-&gt;数据) { foreach代码 }

答案 1 :(得分:0)

$objHouse个对象。即使您使用它,它也没有$data属性。 search方法设置此属性,但仅限于找到记录。如果没有找到记录,则该方法回显一个值。

我会改变它:不是回显错误,而是让方法返回false:

public function search ($term){

    $query = "SELECT * FROM houses WHERE postcode like '%".$this->mysqli->real_escape_string($term)."%'";
    $result = $this->mysqli->query($query);

    $data = false;

    $num_result = $result->num_rows;

    while($row =$result->fetch_assoc()){               
        $data[]=$row;
    }           
    return $data;
}

现在,如果没有数据,该函数将返回false数组。您现在可以像这样使用它:

$obj = new House();
if ($data = $obj->search($_POST['term']))
{
  foreach($obj->data as $val){
    extract($val);
  }
}

我所做的改变: - 不再将data设置为属性,因为您也将其返回。如果你愿意的话,你仍然可以这样做,但我认为这两者都令人困惑。 - 如果没有数据,则返回false。 - 将变量rows更改为row,因为它只包含一行。

答案 2 :(得分:0)

if(is_array($obj->data)){
foreach code
}
else{
no record
}