[英]What would cause include_once to break my code in PHP with 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');
,令我惊讶的是,它确实奏效了。 关于为什么会这样的任何想法?
谢谢。
当您使用require_once时, PHP将检查文件是否已经包含,如果包含,则不要再次包含(要求)该文件。 您可以在这里阅读。
那么这里的问题是什么呢?
从问题陈述中,我假设您之前已经创建了此类的另一个实例,或者您已经在其他地方包含了mysqli_connect.php 。 并在mysqli_connect.php中创建了类似的连接链接。
$ dbc = mysqli_connect(...);
因此,当您使用require_once作为mysqli_connect.php不再加载时,您的$ dbc变量仍然未定义。 并且您的查询不起作用。 但是,当您使用require而不是require_once时 ,将再次加载文件,并再次创建新的连接,并且代码可以正常工作。
注意:尽管改变了要求,解决了您的问题,但您不应该这样使用它。 每次您创建类的新实例时,它将创建与数据库的新连接。 考虑一下:您可以尝试创建类似这样的内容
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.