【问题标题】:mysqli::query(): Couldn't fetch mysqlimysqli::query(): 无法获取 mysqli
【发布时间】:2013-11-25 02:46:36
【问题描述】:

警告:mysqli::query(): Couldn't fetch mysqli in C:\Program Files (x86)\EasyPHP-DevServer-13.1VC9\data\localweb\my便携式文件\class_EventCalendar.php on line 43

以下是我的连接文件:

<?php
if(!isset($_SESSION)) 
{ 
    session_start(); 
}  

// Create array to hold error messages (if any)
$ErrorMsgs = array();

// Create new mysql connection object
$DBConnect = @new mysqli("localhost","root@localhost", 
            NULL,"Ladle");

// Check to see if connection errno data member is not 0 (indicating an error)
if ($DBConnect->connect_errno) {

    // Add error to errors array
    $ErrorMsgs[]="The database server is not available.".
               " Connect Error is ".$DBConnect->connect_errno." ".
               $DBConnect->connect_error.".";
}
?>

这是我的课:

 <?php 
    class EventCalendar {
        private $DBConnect = NULL;

        function __construct() {
            // Include the database connection data
            include("inc_LadleDB.php");
            $this->DBConnect = $DBConnect;  
        }

        function __destruct() {
            if (!$this->DBConnect->connect_error) {
                $this->DBConnect->close();
            }
        }

        function __wakeup() {
            // Include the database connection data
            include("inc_LadleDB.php");     
            $this->DBConnect = $DBConnect;
        }


        // Function to add events to Zodiac calendar
        public function addEvent($Date, $Title, $Description) {
            // Check to see if the required fields of Date and Title have been entered
            if ((!empty($Date)) && (!empty($Title))) {
                /* if all fields are complete then they are 
                   inserted into the Zodiac event_calendar table */
                $SQLString = "INSERT INTO tblSignUps".
                           " (EventDate, Title, Description) ".
                           " VALUES('$Date', '$Title', '".
                            $Description."')";

                // Store query results in a variable
                $QueryResult = $this->DBConnect->query($SQLString);

我对 OOP PHP 不是很好,我不确定为什么会出现这个错误。我从其他地方提取了这段代码,唯一改变的是@new mysqli 参数。谁能帮我理解出了什么问题?

【问题讨论】:

  • 错误所指的第 43 行在哪里?
  • 尝试更正你的mysqli对象:$DBConnect = @new mysqli("localhost","root","","Ladle");
  • Sorry...先试试上面,就可以到达mysqli对象了...
  • 为什么在调用new mysqli() 时通过@ 抑制错误?
  • @AycanYaşıt 谢谢,成功了,抱歉不知道如何正确指定 NULL 密码或用户字段

标签: php mysql mysqli


【解决方案1】:

我遇到了同样的问题。我将 mysqli 对象中的 localhost 参数更改为“127.0.0.1”,而不是写“localhost”。有效;我不确定如何或为什么。

$db_connection = new mysqli("127.0.0.1","root","","db_name");

【讨论】:

    【解决方案2】:

    可能在您有 DBconnection-&gt;close(); 的某个地方,然后尝试执行一些查询。


    提示:在__destruct()中插入...-&gt;close();有时是错误的(因为__destruct是事件,之后会有需要执行查询)

    【讨论】:

    • 遇到了同样的问题“mysqli::query(): 无法获取 mysqli”。谷歌搜索并找到了这个答案。我关闭它太晚了。连接并查询数据库后,我包含了一个新的 php 文件,该文件不知道连接,因此显示了消息。只是评论是否有其他人遇到此问题。欢呼
    • 荣誉,TT 经验教训:不允许任何东西通过 __destruct() 方法破坏 DB 对象。
    • @T.Touda __destruct 不会在 CLASS 构造后被触发,而是“只要没有对特定对象的其他引用或在关闭序列期间以任何顺序调用析构函数方法。 " 见:php.net/manual/en/language.oop5.decon.php
    【解决方案3】:

    检查数据库名称是否没有“_”或“-” 这对我有帮助

    【讨论】:

    • 你能进一步解释一下它是如何连接的吗?如果数据库名称有问题,应该有另一个非常明确的错误消息,并且允许在数据库名称中使用两种类型的破折号
    • 我无法解释这一点,但通过实验发现,似乎任何破折号都破坏了命令解释器并且不起作用。如果数据库名称没有破折号 - 这是完美的。花上 6 个小时,然后第一次见面。投反对票的人不理解也从未遇到过,所以他们不知道这是有效的,即使它看起来很傻。
    • 好吧,我还是不明白。在什么情况下会产生影响?在给定的 PHP 代码中,没有这样的“命令解释器”
    • PHP 是解释器 :) 最近用 WordPress 有这样的。是的,PHP 本身并没有限制你如何命名它,但是如果用破折号重命名 DB,你会得到确切的错误代码
    • 您在使用带破折号的数据库名称时收到错误消息“Couldn't fetch mysqli”?还是您在谈论不同的错误消息?
    【解决方案4】:

    错误原因是mysqli对象初始化错误。真正的构造应该是这样的:

    $DBConnect = new mysqli("localhost","root","","Ladle");
    

    【讨论】:

    • 你能解释一下为什么原始代码是“错误的”吗?如果凭据错误(这是我看到的唯一更改),则应该有一个明确的错误消息
    • @NicoHaase 很简单,root用户密码为空字符串,提供NULL。当凭据不正确时,错误消息通常就像问题顶部给出的错误一样。
    • @AycanYaşıt 但在这种情况下,您会在提供错误凭据时收到错误消息“Couldn't fetch mysqli”吗?此外,文档指出,当不使用参数时,会选择没有密码的用户
    猜你喜欢
    • 2014-08-14
    • 2017-02-28
    • 2019-01-09
    • 2015-09-21
    • 1970-01-01
    相关资源
    最近更新 更多