PHP 5.5.24 MySQLi持久连接返回'无法获取mysqli'

时间:2015-07-14 08:08:54

标签: php mysql mysqli

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

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

注意:未定义的变量:第142行的C:\ xampp \ htdocs \ TodayReport \ tr1.php中的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 ;
?>

1 个答案:

答案 0 :(得分:0)

您对数据库连接的想法非常错误...... 异常

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

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

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

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