【问题标题】:Encountering a PHP error "Illegal string offset" in fetching data using codeigniter使用 codeigniter 获取数据时遇到 PHP 错误“非法字符串偏移”
【发布时间】:2014-12-16 16:01:16
【问题描述】:

所以,我正在试验一个网络应用程序。我想要做的是通过将登录用户的 id 与“帖子”数据库上的 id 匹配,在时间轴中显示用户的帖子列表。

这是我的模型

public function load_posts($user_id)
{
    $this->db->where("user_id",$user_id);
    $query=$this->db->get('posts');

    if ($query->num_rows()>0)
    {
        foreach($query->result() as $rows)
        {
            $haha = array(
                'post_id'   => $rows->id,
                'title'     => $rows->title,
                'artist'    => $rows->artist,
                'album'     => $rows->album,
                'caption'   => $rows->caption,
            );
        }   
        return $haha;
    }
    return array();
}

我的控制器

public function welcome()
{
    $data['title']= 'Welcome';

    $user_id=$this->session->userdata('user_id');
    $haha['hah'] = $this->user_model->load_posts($user_id);

    $this->load->view('header_view',$data);
    $this->load->view('welcome_view.php', $haha);
    $this->load->view('footer_view',$data);
}

还有风景

<div class="timeline">
    <div class="boxes">
        <table>
        <?php
            foreach($hah as $rows):
        ?>
        <tr>
            <td><?php echo $rows['title']; ?></td>
            <td><?php echo $rows['artist']; ?></td>
            <td><?php echo $rows['album']; ?></td>
            <td><?php echo $rows['caption']; ?></td>
        </tr>
        <?php
            endforeach;
        ?>
        </table>
    </div>
</div>

使用这些代码,我得到 4 行这些错误

A PHP Error was encountered

Severity: Warning

Message: Illegal string offset 'title'

Filename: views/welcome_view.php

Line Number: 25

2   
A PHP Error was encountered

Severity: Warning

Message: Illegal string offset 'artist'

Filename: views/welcome_view.php

Line Number: 26

2   
A PHP Error was encountered

Severity: Warning

Message: Illegal string offset 'album'

Filename: views/welcome_view.php

Line Number: 27

2   
A PHP Error was encountered

Severity: Warning

Message: Illegal string offset 'caption'

Filename: views/welcome_view.php

Line Number: 28

2

以防万一,我的“帖子”表

CREATE TABLE IF NOT EXISTS `posts` (
`id` int(11) NOT NULL,
`title` varchar(255) NOT NULL,
`artist` varchar(255) NOT NULL,
`album` varchar(255) NOT NULL,
`cover` varchar(30) NOT NULL,
`caption` text NOT NULL,
`user_id` int(11) NOT NULL,
`postTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)

任何帮助将不胜感激!

【问题讨论】:

  • 如果将数据库“where”放在模型中的 get 函数上方会发生什么?
  • 您已将$haha 附加到您的视图中,并尝试在$hah foreach($hah as $rows): 上循环。不是笔误吗?我在任何地方都没有看到$hah。
  • $haha 与$hah?
  • 其实可以在 $haha['hah'] = $this->user_model->load_posts($user_id); (在控制器中。我只是在玩弄变量名。
  • @Craig: 哦,是的,我交换了它们只是想看看它是否对任何东西有影响,结果不是,我忘记把它放回原来的位置,然后再把它贴在这里。恢复到原来的状态

标签: php database codeigniter


【解决方案1】:

您返回的结果数组未使用您期望的键,但您正在尝试访问它们。熟悉 Codeigniter 中的返回结构的最好方法是阅读文档,或者如果你像我一样是一个更“手脏”的类型,只需在返回语句之前在你的模型中添加一个 var_dump($haha)。

【讨论】:

  • 我是使用 CI 的新手,所以我想是的,我还不熟悉返回结构
  • 太棒了!您将学到很多东西,乍一看似乎您正在返回一个带有键的数组数组。这是 CI 的数据库返回结果的链接。 ellislab.com/codeigniter/user-guide/database/results.html
【解决方案2】:

您是否打开了探查器?您看到生成的查询正确吗?

你需要翻转你所拥有的。

$this->db->where("user_id", $user_id);
$query = $this->db->get('posts');

或者你可以使用get_where

$query = $this->db->get_where('posts', array('user_id' => $user_id));

【讨论】:

  • 在你的控制器中输入var_dump($haha['hah']); ...显示什么?
  • 它显示 'array(5) { ["post_id"]=> string(1) "2" ["title"]=> string(20) "Far Side of the Moon" ["艺术家"]=> string(7) "Tinashe" ["album"]=> string(8) "Aquarius" ["caption"]=> string(6) "A6 bgt" }' 在页面顶部跨度>
  • $this-&gt;load-&gt;view('welcome_view.php', $haha); ... 如果您从视图中删除 .php 扩展名并只保留 $this-&gt;load-&gt;view('welcome_view', $haha); 会怎样
  • 不知道该告诉你什么。但是数据又回来了,因为您可以通过var_dump() 看到...您将其传递给视图,因此您应该能够通过$hah 访问它。
猜你喜欢
  • 2020-06-11
  • 1970-01-01
  • 2013-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多