我写了一个php函数,它应该返回最高主键值。当我调用该函数一次时它工作正常,但是当我调用它两次时我得到错误
以下是我的输出:
0 //第一个函数调用的正确答案
//第二个函数调用出现以下错误
注意:未定义的变量:DBH
致命错误:在非对象上调用成员函数query()
这是我的函数文件的代码:
<?php function getPKofLastInsert($event)
{
require_once('connection.php');
$Q="";
switch ($event)
{
case "c":
$Q= "SELECT `PK` FROM `c` ORDER BY `PK` DESC LIMIT 0,1";
break;
case "s":
$Q = "SELECT `PK` FROM `s` ORDER BY `PK` DESC LIMIT 0,1";
break;
case "w":
$Q = "SELECT `PK` FROM `w` ORDER BY `PK` DESC LIMIT 0,1";
break;
}
if(!$result= $DBH->query($Q))
{
die("error");
}
else if($result->num_rows==0)
{ return 0; }
else
{
$row= $result->fetch_asoc();
$t=$row['PK'];
$result->free();
//$DBH->close();
return $t;
}
}
?>
<?php
print getPKofLastInsert("c");
print getPKofLastInsert("c");
?>
这是我的 connection.php 文件:
$DBH = new mysqli(MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DB);
if ($DBH->connect_errno) {
echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}
在某些论坛上我发现:
$DBH->close();
应该工作,在我的情况下,它不ps我不认为我需要,因为我使用require_once(),我显然需要我的数据库句柄$ DBH用于其他功能....请帮助,感谢
答案 0 :(得分:0)
由于您使用的是require_once()
而不是require()
,因此它只会在第一次运行该代码。
有几个方法可以解决这个问题:
更改为require('connection.php')
。每次调用该函数时,这将打开一个新的数据库连接,因此您应该取消注释$DBH->close()
以防止有大量连接。
在$DBH
中声明connection.php
静态,因此它会在调用中保持其值。
将require_once('connection.php')
放在函数外部,并将$DBH
作为参数传递给函数。
将require_once('connection.php')
放在函数外部,并将global $DBH;
放入函数中。