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

PHP+MySQL中的全局变量和减少数据库访问,php,mysql,database,Php,Mysql,Database,我是PHP+MySQL新手,并按照一个示例构建了一个web页面 基本上,我的首页读取数据库,检索页面上的所有项目和列表。每个项目都有一个指向显示其详细信息的新页面的链接 列表页: //itemlist.html.php <html><body> <ul> <?php foreach ($items as $item): ?> <li><a href="?C1=<?php echo($item['c1']); ?>

我是PHP+MySQL新手,并按照一个示例构建了一个web页面

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

列表页:

//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时,就检索到$infos。我想避免为了得到一个特定的项目而再次访问数据库,所以我考虑重用$infos。但当我触发'C1'时,它变为null。是否可以将$items保留为全局变量?还是有其他方法可以做到这一点


任何帮助都将不胜感激

您可以将检索到的行集存储在$\u会话超全局中。比如:

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'];

但是是的,Dagon说的是真的。

只需移动查询,并在if-isset$\u-GET['C1']行上方循环,这将使$items可用于itemeach.html.php脚本。如果您可以发布itemeach.html.php的内容,我们可以进一步帮助您。

您可以将检索到的行集存储在$\u SESSION superglobal中。类似:$\u会话['items]=$items;把它放在while循环之后。为每个页面做一个新的db请求是标准的方法。我现在考虑的不是打开一个新窗口,而是pop-div+css。我知道如何使用javascript进行静态pop div,但如何使用php+javascript,即pop div中的上下文是动态的?