以下代码无法正常工作:

    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 已采纳

当您使用require_once时, PHP将检查文件是否已经包含,如果包含,则不要再次包含(要求)该文件。 您可以在这里阅读。

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

$ dbc = mysqli_connect(...);

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

注意:尽管改变了要求,解决了您的问题,但您不应该这样使用它。 每次您创建类的新实例时,它将创建与数据库的新连接。 考虑一下:您可以尝试创建类似这样的内容

  ask by Dan Luba translate from so

未解决问题?本站智能推荐: