我对 php 比较陌生。我有一个函数可以通过 tableName 获取所有主题。我还有一个函数,我试图获取 subject_id (来自页面表)与主题表 id 匹配的所有页面。
以下是错误和输出:
PDOStatement 对象 ( [queryString] => SELECT * FROM subject ORDER BY id ASC )
Array ( [0] => Array ( [id] => 1 [0] => 1 [menu_name] => 关于我们 [1] => 关于我们 [position] => 1 [2] => 1 [visible] => 1 [3] => 1 ) [1] => Array ( [id] => 2 [0] => 2 [menu_name] => 产品 [1] => 产品 [position] => 2等等等等...
注意:未定义索引:第 39 行/Users/aaronhappe/Sites/php/CMS/includes/db.php 中的 id
fatal error :在第 41 行/Users/aaronhappe/Sites/php/CMS/includes/db.php 中的非对象上调用成员函数 rowCount()
这是代码:
<?php
// controller file
include '../admin-head-includes.php';
$subjects = getAll('subjects', $conn);
$subjectId = $subjects->fetchAll();
print_r($subjects);
echo "<br>";
echo "<br>";
print_r($subjectId);
$pages = getAllLinkedId('pages', $subjectId, $conn);
view('manage-content', array(
'subjects' => $subjects,
'pages' => $pages,
));
// from my db functions file
function getAllLinkedId($tableName, $tableName2, $conn) {
try {
$result = $conn->query("SELECT * FROM $tableName WHERE subject_id = {$tableName2['id']} ORDER BY id ASC");
return ($result->rowCount() > 0)
? $result
: false;
} catch (Exception $e) {
return false;
}
<!-- standard functions file -->
<?php function view($path, $data = null) {
if ($data) {
extract($data);
}
$path = $path . '.views.php';
include "views/$path";
}?>
如果我将 $subjects[0] 传递到 getAllLinkedId 函数中,它可以解决数组包装其他数组的问题。然而,我想要的是为每个主题吐出相应的页面。不仅是对应一个主题的页面,而是响应所有主题的页面。
这是我的观点:
<div class="subjects">
<ul>
<?php
foreach ($subjects as $subject) {?>
<li>
<?=$subject['menu_name'];?>
</li>
<ul>
<?php foreach ($pages as $page) {?>
<?=$page['menu_name']?>
<?php }?>
</ul>
<?php }?>
</ul>
</div>
最佳答案
第一个问题:
Notice: Undefined index: id in ...
数组$tableName2
中的索引id未设置,检查是否设置
第二个问题:
Fatal error: Call to a member function rowCount() on a non-object ..
$conn->query()
失败时返回非对象,检查 $result
是否是对象
在您的代码中:
function getAllLinkedId($tableName, $tableName2, $conn) {
// check if index id is set
if( !isset($tableName2['id']) )
return false;
try {
$result = $conn->query("SELECT * FROM $tableName WHERE subject_id = {$tableName2['id']} ORDER BY id ASC");
// check if $result is object
if( !is_object($result) )
return false;
return ($result->rowCount() > 0) ? $result : false;
} catch (Exception $e) {
return false;
}
}
关于PHP匹配主题表和页表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25960792/