在同一页面上重用MYSQL查询

时间:2011-04-29 08:20:52

标签: php syntax reusability

我有一个header.php和一个footer.php文件包含在同一页面上,它们都返回了一些相同的信息。具体来说,我在每个文件中使用此查询。

<?php   
    $q3 = "SELECT page_id, show_id, link_title FROM pages as p WHERE show_id = 1";
    $r3 = @mysqli_query ($dbc, $q3); // Run the Query.
    while ($nav = mysqli_fetch_array($r3, MYSQLI_ASSOC)) {
    echo"<li>{$nav['link_title']}</li>"
    }
?>

这是为了显示页眉和页脚中的页面。

然而,有时页脚中的第二个查询会返回“无法获取mysqli”,有时它会起作用,有时它不会。我想知道我是否应该使用类似mysqli_free_result()这样的更好的做法?

更重要的是,在每次查询后释放结果是不错的做法?是否有更好的方法可以使用来自不同网页和<?php // ?>代码的相同结果?

另外,我偶尔得到错误“太多的mysql连接错误”?这是因为我在运行查询后没有关闭连接吗?

2 个答案:

答案 0 :(得分:1)

在包含页眉和页脚之前只运行一次查询并将结果存储在变量中 - 您可以在此之后多次使用它们。

只有当你有一个非常大的结果集时才应该使用

mysqli_free_result(),因为PHP会在不再需要它之后自行解决它,并且每次只需创建额外的开销就手动执行此操作。

您收到“连接太多”错误,因为您可能正在重复执行相同的查询而打开多个连接 - 在包含任何其他脚本之前只创建一个连接并重新使用它。你应该使用mysql_pconnect()的标准mysql扩展来更好地解决这个问题...否则 - 是的,在你不再需要之后关闭连接。

答案 1 :(得分:1)

您可以从代码中删除@。错误抑制是缓慢且有害的做法。

如果你的inlcude在同一范围内,你只需要在某个变量中保存first的值,然后在第二个中检查是否已设置变量。

header.php的内容

$storage = '';
$query = "SELECT page_id, show_id, link_title FROM pages as p WHERE show_id = 1";
if ( $result = mysqli_query ($dbc, $query))
{
   while ($nav = mysqli_fetch_array($result, MYSQLI_ASSOC)) 
   {
      $item = "<li>{$nav['link_title']}</li>";
      $storage .= $item;
      echo $item;
   }
}
else
{
   echo 'Query has failed !';
}

footer.php的内容

if ( isset( $storage ) && count( $storage ))
{
   echo $storage;
}
else
{
   echo 'Query has failed !';
}

在精细手册中阅读include()

请尽快停止写这种程序性的变态。了解如何进行OOP并阅读PDO