首页 文章

PHP 5.5.24 MySQLi持久连接返回'couldn' t获取mysqli'

提问于
浏览
0

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

Warning: mysqli_close(): Couldn't fetch mysqli in C:\xampp\htdocs\TodayReport\tr1.php on line 99

Notice: Undefined variable: Result1Con in C:\xampp\htdocs\TodayReport\tr1.php on line 142

Warning: mysqli_close() expects parameter 1 to be mysqli, null given in C:\xampp\htdocs\TodayReport\tr1.php on line 142

我在下面的网页上提到

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

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

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

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

    另外,请勿调用 mysqli_close() . PHP将为您关闭连接 .

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

相关问题