全局变量和减少数据库访问PHP+MySQL


global variable and reduce database accesses in PHP+MySQL

我是PHP+MySQL的新手,并遵循一个示例来构建一个网页。

基本上,我的首页读取数据库,检索页面上的所有项目和列表。每个项目都有一个链接到一个显示其详细信息的新页面。

列表页:

//itemlist.html.php
<html><body>
<ul>
<?php foreach ($items as $item): ?>
    <li><a href="?C1=<?php echo($item['c1']); ?>">
    <?php echo($item['c1']); ?></a></li>
<?php endforeach; ?>
</ul>
</body></html>

条目页:

//itemeach.html.php
<html><body>
<h1><?php echo($c1) ?></h1>
<p><?php echo($c2) ?></p>
</body></html>

索引页:

<?php
if (isset($_GET['C1']))
{
    /*
    I want to reuse $iteminfos and get value for $c1 and $c2
    */
    include 'itemeach.html.php';
    exit();
}
$result = mysqli_query($link, 'SELECT * FROM TB');
while ($row = mysqli_fetch_array($result))
{
    $items[] = array('c1' => $row['c1'], 'c2' => $row['c2']);
}
include 'itemlist.html.php';
?>
我删除了不必要的代码。因为当它第一次加载index.php时,会检索到$info。我想避免再次访问数据库以获得一个特定的项目,所以我正在考虑重用$info。但是当我触发'C1'时,它变成null。这是可能保持$items作为一个全局变量吗?还是有别的办法?

任何帮助都将非常感激!

可以将检索到的行集存储在$_SESSION超全局变量中。如:

if (empty($_SESSION['items']) {
    $result = mysqli_query($link, 'SELECT * FROM TB');
    while ($row = mysqli_fetch_array($result)) {
        $rowData[] = array('c1' => $row['c1'], 'c2' => $row['c2']);
    }
    $_SESSION['items'] = $rowData;
}
$items = $_SESSION['items'];

但是大贡说的是真的

只需将查询和while循环移动到if (isset($_GET['C1']))行上方,这将使itemeach.html.php脚本可以使用$items。如果你能发布itemeach.html.php的内容,我们可以进一步帮助你。