我试图从我的数据库中提取页面并将它们设为实际页面网址:
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'
错误。我该如何解决这个问题?
答案 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";
}