2017-04-26 110 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"; 
}