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

时间:2011-11-01 19:25:24

标签: php mysql database

我是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开始,就会检索到$ infos。我想避免再次访问数据库以获取一个特定项目,所以我正在考虑重新使用$ infos。但是当我触发'C1'时它变为null。这可以将$ items作为全局变量吗?还是有其他办法吗?

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

您可以将检索到的行集存储在$ _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'];

但是,Dagon所说的是真的。

答案 1 :(得分:0)

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