我有一个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连接错误”?这是因为我在运行查询后没有关闭连接吗?
答案 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。