非法字符串偏移' slug' PDO

时间:2017-04-26 13:30:17

标签: php pdo foreach

我试图从我的数据库中提取页面并将它们设为实际页面网址:

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'

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

3 个答案:

答案 0 :(得分:3)

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

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

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

相反:

$stmt->execute();

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

答案 1 :(得分:0)

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

答案 2 :(得分:-2)

如果只需要一行,就不应该选择所有行。

$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";
}