PHP匹配主题表和页表

标签 php mysql pdo

我对 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/

相关文章:

javascript - 如何使用 Jquery 重新加载 PHP 查询(包含页面)

php - Opencart 自定义 mysql 搜索表单

Java如何检查mysql是否正在运行

mysql - VB.NET 2010 和 MySql - 为懒惰的人处理 DB NULL

php - 显示数据库中最接近的匹配项

php - 如何自动重新打开与 MySQL 的持久连接

mysql - 如何显示 mysql 表中通过单值匹配与另一个表连接的多个条目的数据?

php - PDO查询优化

php - 仅获取表中重复项的最小值

php - 如何使用 PDO 检查数据库中是否存在一行?