0

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

4

1 回答 1

0

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

有几个选项可以解决这个问题:

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

  2. 声明$DBHstatic in connection.php,因此它将在调用中保持其值。

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

  4. 放在require_once('connection.php')函数外面,放在global $DBH;函数里面。

于 2013-05-30T20:07:35.013 回答