为什么只有第一个字母列来自php中的mysql数据库?

时间:2010-09-12 13:37:07

标签: mysql

我的数据库是

CREATE TABLE `mytable` (
       `id` int(10) AUTO_INCREMENT,
       `name` varchar(50),
       `description` varchar(255),
       `visible` varchar(10),
       PRIMARY KEY (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET utf8;

和php代码是

     $display = query("SELECT * FROM mytable ORDER BY id ASC");
     foreach($display as $row) {
      echo $row['id'];
      echo $row['name'];
      echo $row['description'];     
}

我的代码有什么问题?数据不显示,显示时仅显示第一个字母。所有配置和连接设置都很好。请帮忙

3 个答案:

答案 0 :(得分:1)

var_dump($row);

答案 1 :(得分:1)

看起来我陷入了同样的陷阱:) 你的桌子上只有一排吗?
如果这个query()函数太聪明了,通过返回数据确定返回类型,则可能是一个原因 使其返回嵌套数组,而不是一行。 并明确定义结果类型,而不是基于返回的数据自动定义。添加一个参数以指示您想要的结果类型。

但是,这样的功能是非常好的方法。只有少数人有设计这样一个功能的想法,而不是通过众多API函数不断的麻烦。

但是如果你期望只有一行,那么

$row = query("SELECT * FROM mytable ORDER BY id ASC");
echo $row['id'];
echo $row['name'];
echo $row['description'];     

答案 2 :(得分:0)

我使用CodeIgniter时遇到了同样的问题。

对我来说,问题是当我只是一个数字索引的数组时,我试图使用关联键来回显数组值。我很惊讶它有用。

所以我的数组是这样构建的:

$result = $this->ci->db->get('role');

if($result->num_rows() > 0)
{
    foreach($result->result_array() as $row)
    {
        $roles[$row['id']] = $row['name'];  
    }   
}

当我尝试使用这样的数组时:

foreach($roles as $role)
{
    echo $role['name'];
}

它只会打印出每个值的第一个字母。

当我改变要构建的数组时:

        $roles[$row['id']] = array('name' => $row['name']);

一切都按预期工作。

希望这有助于某人。