以下代码无效:
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');
,令我惊讶的是,它有效。关于为什么会这样的任何想法?
感谢。
答案 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
的内容