查询结果超出应有的范围

时间:2014-04-19 21:44:04

标签: php pdo sizeof

我的课程中有这个代码:

public function get_data(){
        $sql = "select id_especialidad, descripcion from especialidad";
        foreach($this->dbh->query($sql) as $row)
        {
                $this->rows[] = $row;
        }
        return $this->rows;
}

现在我从HTML文件中使用它:

<select>
    <?php
        $datos = $db->get_data();
        for($i=0;$i<sizeof($datos);$i++)
        {
            ?>
                <option value="<?php echo $datos[$i]["id_especialidad"]?>"><?php echo $datos[$i]["descripcion"]?></option>
           <?php
        }
    ?>
</select>

现在在浏览器中我看到带有行的select但在第一行中是:“注意:未定义的索引:(file_path)中的描述”

我的表格中有9行,但是当我把它设为“print sizeof($ datos)”时,它显示了11行。

发生了什么事?

有另一种显示此数据的方法吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

由于我不知道你在哪里以及如何使用或重新使用$this->rows[],因为你还没有发布它,我会改变你的代码:

public function get_data()
{
    $sql = "SELECT id_especialidad, 
                   descripcion 
              FROM especialidad";
    $result = array();
    foreach($this->dbh->query($sql) as $row)
    {
        $result = $row;
    }
    return $result;
}

鉴于 $this->dbh->query PDO query,如果您print_r得到get_data的结果,它应该会给您类似的内容:< / p>

Array(
    [0]=>Array([id_especialidad]=>1
                             [0]=>1
                   [descripcion]=>test
                             [1]=>test
              )
    [1]=>Array([id_especialidad]=>2
                             [0]=>2
                   [descripcion]=>test2
                             [1]=>test2
              )
     )

你可以像这样轻松阅读:

<select>
<?php
$data = $db->get_data();
foreach ($data as $item)
{
?>
    <option value="<?php echo $item["id_especialidad"]; ?>"><?php echo $item["descripcion"]; ?></option>
<?php
}
?>
</select>

如果您获得的结果超过9个,那么它本应该只有9个,我只能认为$this->rows[]在使用后或类似情况下未被清除可能会出现问题。