多次调用同一函数时出错

时间:2013-05-30 19:49:46

标签: php database mysqli

我写了一个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用于其他功能....请帮助,感谢

1 个答案:

答案 0 :(得分:0)

由于您使用的是require_once()而不是require(),因此它只会在第一次运行该代码。

有几个方法可以解决这个问题:

  1. 更改为require('connection.php')。每次调用该函数时,这将打开一个新的数据库连接,因此您应该取消注释$DBH->close()以防止有大量连接。

  2. $DBH中声明connection.php静态,因此它会在调用中保持其值。

  3. require_once('connection.php')放在函数外部,并将$DBH作为参数传递给函数。

  4. require_once('connection.php')放在函数外部,并将global $DBH;放入函数中。