2017-04-26 75 views
0

我想從我的數據庫中提取的頁面,使他們的實際網頁網址:非法串偏移「塞」 PDO

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'); 
    } 
} 

但由於某種原因,這是行不通的。我不斷收到這個

非法串偏移 '塞'

錯誤。我該如何解決這個問題?

+0

你應該規範你的分貝。逗號分隔值很難與 –

+0

一起工作任何建議如何做得更好? –

回答

3

$page實際上是一個字符串,因此是錯誤。 fetch返回一行,所以:

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

實際上以字符串的形式循環遍歷每一列。

相反:

$stmt->execute(); 

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

變化$menu = $stmt->fetch(PDO::FETCH_ASSOC);$menu = $stmt->fetchAll(PDO::FETCH_ASSOC); 或 刪除foreach和使用$menu['slug'],而不是$page['slug']

+0

試着想爲什麼第二個是錯的 –

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