【问题标题】:Illegal string offset 'slug' PDO非法字符串偏移 'slug' PDO
【发布时间】:2017-09-23 22:40:32
【问题描述】:

我正在尝试从我的数据库中提取页面并使其成为实际的页面 url:

http://i.imgur.com/r5AuaKB.png

$stmt = $auth_user->runQuery("SELECT * FROM pages");
$stmt->execute();
$menu = $stmt->fetch(PDO::FETCH_ASSOC);

foreach($menu as $page) {
    if(basename($_SERVER['REQUEST_URI']) == $page['slug']){
        require_once('inc/page/' . $page['slug'] . '.php');
    }
}

但由于某种原因它不起作用。我不断收到这个

非法字符串偏移'slug'

错误。我该如何解决这个问题?

【问题讨论】:

  • 你应该标准化你的数据库。逗号分隔的值很难使用
  • 有什么建议可以做得更好吗?

标签: php pdo foreach


【解决方案1】:

当你只需要一个时,你永远不应该选择所有行。

$stmt = $auth_user->runQuery("SELECT slug FROM pages WHERE slug = ?");
$stmt->execute([basename($_SERVER['REQUEST_URI'])]);
$slug = $stmt->fetchColumn();

if($slug) {
    require_once "inc/page/$slug.php";
}

【讨论】:

    【解决方案2】:

    $menu = $stmt->fetch(PDO::FETCH_ASSOC); 更改为$menu = $stmt->fetchAll(PDO::FETCH_ASSOC); 要么 删除foreach 并使用$menu['slug'] 而不是$page['slug']

    【讨论】:

      【解决方案3】:

      $page 实际上是一个字符串,因此是错误的。 fetch 返回一行,所以:

      $menu = $stmt->fetch(PDO::FETCH_ASSOC);
      foreach($menu as $page) { ...
      

      实际上将每一列作为字符串循环。

      改为:

      $stmt->execute();
      
      while ($page = $stmt->fetch(PDO::FETCH_ASSOC)) { ...
      

      【讨论】:

        猜你喜欢
        • 2013-02-19
        • 1970-01-01
        • 2013-09-30
        • 2020-11-29
        • 2017-09-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多