什么会导致include_once在PHP中破坏我的PHP代码?

时间:2014-04-20 01:40:55

标签: php mysql

以下代码无效:

    public function __construct($thread_id)
    {
        require_once('../private/mysqli_connect.php');
        require_once('../php_classes/class_message.php');

        $this->thread_id=$thread_id;

        $q="SELECT *
        FROM message_thread_name
        WHERE thread_id=2";

        if($r=@mysqli_query($dbc, $q))
        {
            while($row=mysqli_fetch_array($r, MYSQLI_ASSOC))
            {
                $this->poster=$row['name'];
                $this->subject=$row['thread_subject'];
            }
        }

        $qm="SELECT message_id
        FROM message
        WHERE thread_id=$this->thread_id";

        if($rm=@mysqli_query($dbc, $rm))
        {
            while($rowm=mysqli_fetch_array($rm, MYSQLI_ASSOC))
            {
                $message=new message($rowm['message_id']);
                array_push($this->messages, $message);
            }
        }
    }

我没有修复它的想法,因此我将require_once('../private/mysqli_connect.php');更改为require('../private/mysqli_connect.php');,令我惊讶的是,它有效。关于为什么会这样的任何想法?

感谢。

1 个答案:

答案 0 :(得分:0)

使用 require_once 时,PHP会检查文件是否已包含在内,如果已包含,则不再包括(要求)。你可以阅读它here

那么这里的问题是什么?
从您的问题陈述中,我假设您之前已经创建了此类的另一个实例,或者您已经在其他地方包含了 mysqli_connect.php 。在您的 mysqli_connect.php 中,您创建了类似的连接链接。

  

$ dbc = mysqli_connect(...);

因此,当您使用require_once而 mysqli_connect.php 未再次加载时,您的 $ dbc 变量仍未定义。并且您的查询不起作用。但是当您使用 require 而不是 require_once 时,文件会再次加载,并且会再次创建新连接,并且您的代码可以正常运行。

NB:虽然更改为要求,解决了您的问题,但您不应该像这样使用它。每次创建类的新实例时,它都将创建与数据库的新连接。根据您的想法:您可以尝试创建类似this

的内容