【问题标题】:PHP 5.5.24 MySQLi persistent connection returns 'couldn't fetch mysqli'PHP 5.5.24 MySQLi 持久连接返回“无法获取 mysqli”
【发布时间】:2015-07-14 08:08:54
【问题描述】:

我想避免为同一页面中的每个查询重新连接数据库,也就是想在 mysqli_connect 后重用连接结果,这样我可以加快结果。我在主机名前尝试了“p:”。但我仍然低于警告。当我在没有持久性“p:”的情况下连接并连接每个查询时,我会得到预期的结果。

警告:mysqli_close():无法在第 99 行的 C:\xampp\htdocs\TodayReport\tr1.php 中获取 mysqli

注意:未定义变量:C:\xampp\htdocs\TodayReport\tr1.php 中第 142 行的 Result1Con

警告:mysqli_close() 期望参数 1 为 mysqli,在第 142 行的 C:\xampp\htdocs\TodayReport\tr1.php 中给出 null

我参考了下面的页面。

How to use mysqli persistent connection across different pages

Php Mysqli Persistent connection error

下面是我的脚本(我已经最小化以便能够快速阅读)

<?php
$webpage = "<!DOCTYPE html><html><head><title>Record Count</title><script src='sorttable.js'></script></head>";
$FirstProjectTitle = "Result1";
$SecondProjectTitle = "Result2";
//constructing HTML layout
Global $LoginDetailsCon;
Global $LoginDetailsResult;
$LoginDetailsCon=mysqli_connect("p:98.168.2.14","root","root@123","resultdbmain") or die("Failed to connect to resultdbmain: " . mysqli_connect_error());
$LoginDetailsQuery="SELECT * FROM login WHERE `IsWorking` = 1 AND `level` = 1";
$LoginDetailsResult=mysqli_query($LoginDetailsCon,$LoginDetailsQuery);
while ($row=mysqli_fetch_array($LoginDetailsResult,MYSQLI_ASSOC)) { 
$Result1Con=mysqli_connect("98.168.2.14","root","root@123","resultdb1") or die("Failed to connect to resultdb1: " . mysqli_connect_error());
$result1Query="SELECT * FROM `resultdb1table1` WHERE `SID` = " . $row["ID"] ." AND `KeyDate` > '" . date("Y-m-d") . " 00:00:00' ";
$result1Result=mysqli_query($Result1Con,$result1Query);
$i=0;
$ik=0;
$SName = $row["Name"];
while ($row=mysqli_fetch_array($result1Result,MYSQLI_ASSOC)) { 
$i++;
$ik = $ik + $row["KeyStroke"];
if ($i==1) {
$started=$row["KeyDate"];
}
$Lastkeyed=$row["KeyDate"];
}
if ($i > 0) {
//constructing HTML layout with results
}
}
$webpage .= "</table>";
mysqli_close($Result1Con);
//$LoginDetailsCon=mysqli_connect("98.168.2.14","root","root@123","resultdbmain");
//if (mysqli_connect_errno()) {  echo "Failed to connect to resultdbmain: " . mysqli_connect_error(); }
//$LoginDetailsQuery="SELECT * FROM login WHERE `IsWorking` = 1 AND `level` = 1";
//$LoginDetailsResult=mysqli_query($LoginDetailsCon,$LoginDetailsQuery);
while ($row=mysqli_fetch_array($LoginDetailsResult,MYSQLI_ASSOC)) { 
$Result2Con=mysqli_connect("98.168.2.14","root","root@123","resultdb2") or die("Failed to connect to resultdb2: " . mysqli_connect_error());
$result2Query="SELECT * FROM `resultdb2table1` WHERE `ID` = " . $row["ID"] ." AND `KeyDate` > '" . date("Y-m-d") . " 00:00:00' ";
$result2Result=mysqli_query($result2Con,$result2Query);
$i=0;
$ik=0;
$UName = $row["Name"];
while ($row=mysqli_fetch_array($result2Result,MYSQLI_ASSOC)) { 
$i++;
$ik = $ik + $row["KeyStroke"];
if ($i==1) {
$started=$row["KeyDate"];
}
$Lastkeyed=$row["KeyDate"];
}
if ($i > 0) {
//constructing HTML layout with results
}
}
mysqli_close($result2Con);
mysqli_close($LoginDetailsCon);
$webpage .= "</body></html>";
echo $webpage ;
?>

【问题讨论】:

    标签: php mysql mysqli


    【解决方案1】:

    你对数据库连接的想法非常错误...... 不寻常

    当然,您不必为同一页面中的每个查询重新连接。但是您也不需要多个连接。只需使用一个连接。 事实上,您不必(也不应该)在每次运行查询时都连接。相反,您应该在每次执行脚本时只连接一次,然后在整个代码中使用那个单一的连接变量。

    因此,创建一个名为 connection.php 的文件,将您的连接代码一次放在那里,然后在每个需要数据库交互的脚本中 include 它。

    另外,请勿致电mysqli_close()。 PHP 将为您关闭连接。

    暂时忘记持久连接。你不需要它。

    【讨论】:

    • 谢谢。让我试一试,因为我需要一些时间来修改所有查询,因为它有超过 40 个查询,我感谢您的解决方案。
    • 使用包含的连接文件似乎快一点。但是,如果我删除 mysqli_close 行,它会抛出一些错误,因为“无法获取 mysqli”。看来我错过了什么。无论如何感谢您的解决方案。
    猜你喜欢
    • 2011-03-29
    • 2011-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-24
    • 2013-11-25
    相关资源
    最近更新 更多