当前位置: 首页 > 知识库问答 >
问题:

Mysqli转换的类未关闭和工作

丘飞
2023-03-14
class dbConn {

private static $dbConn;

public function __construct()
{
    try {
        //$this->dbConn = new mysqli(dbHost, dbUser, dbPass, dbName) or die();    
        $this->dbConn = mysqli_connect(dbHost, dbUser, dbPass, dbName) or die();    
        //mysqli_select_db($this->dbConn, dbName) or die();
        @mysqli_set_charset($this->dbConn, 'utf8');

    } catch (Exception $e) {
        die($e->getMessage());
    }
}

public static function singleton()
{
    if(!isset(self::$dbConn)) {
        $c = __CLASS__;
        self::$dbConn = new $c;
    }
    return self::$dbConn;
}

public function query($sql)
{
    try {

        if(!$q = mysqli_query($this->dbConn, $sql))
            throw new Exception($this->debug($sql));

    } catch (Exception $e) {
        die($e->getMessage());
    }

    return $q;
}

public function getValue($sql)
{
        $row = mysqli_fetch_row($this->query($sql));
        return $row[0];
}

public function getRow($sql, $cache = 1)
{
        $res = mysqli_fetch_assoc($this->query($sql));
        return $res;
}

public function getRows($sql, $cache = 1)
{
        $q = $this->query($sql);

        while($row = mysqli_fetch_assoc($q))
            $res[] = $row;

        return $res;
}

public function getLastInsertId() {
    return mysqli_insert_id($this->dbConn);
}

public function getRowNum($sql)
{
    $res = mysqli_num_rows($this->query($sql));
    return $res;
}

/* Escape */
public function varEscape()
{
    if($_GET) $_GET = $this->arrayEscape($_GET);
    if($_POST) $_POST = $this->arrayEscape($_POST);
    if($_COOKIE) $_COOKIE = $this->arrayEscape($_COOKIE);
    if($_REQUEST) $_REQUEST = $this->arrayEscape($_REQUEST);
}

public function arrayEscape($arr)
{
    foreach($arr as $key => $val)
        $arr[$key] = is_array($val) ? $this->arrayEscape($val) : $this->strEscape($val);

    return $arr;
}

public function strEscape($str)
{
    if(get_magic_quotes_gpc())
        $str = stripslashes($str);

    $str = trim($str);
    $str = $this->strControl($str);
    $str = mysqli_real_escape_string($this->dbConn, $str);          

    return $str;
}

public function strControl($str)
{
    $s = array('/*', '*/', 'UNION', 'NULL', '<!--', '-->');
    $r = array('', '', '', '', '', '');
    return $str = str_replace($s, $r, $str);
}

public function debug($sql = 'N/A')
{
    if(DEBUG) {

        $str = '<b>Debug Mode!</b>'
             . '<br />Referer: ' . $_SERVER['HTTP_REFERER']
             . '<br />File: ' . $_SERVER['PHP_SELF'] 
             . '<br />Error: ' . mysqli_error($this->dbConn)
             . '<br />SQL: ' . $sql;

        foreach($_GET as $key => $val)
            $str .= '<br />GET: ' . $key . ' = ' . $val;

        foreach($_POST as $key => $val)
            $str .= '<br />POST: ' . $key . ' = ' . (is_array($val) ? print_r($val, true) : $val);

        foreach($_FILES as $key => $val)
            $str .= '<br />FILES: ' . $key . ' = ' . (is_array($val) ? print_r($val, true) : $val);

        foreach($_SESSION as $key => $val)
            $str .= '<br />SESSION: ' . $key . ' = ' . (is_array($val) ? print_r($val, true) : $val);

        $css = 'font-family: Arial; font-size: 12px; color: red;';
        $str = '<pre style="' . $css . '">' . $str . '</pre>';
    }

    return $str;
}

public function __destruct() {
    mysqli_close($this->dbConn);
}

}

这是我用于连接和其他查询人员的代码。现在它给了我一些错误,比如:

PHP警告:mysqli_connect()[function.mysqli连接]:(08004/1040):第19行 /home/account/public_html/library/class.db.blog.php连接太多

PHP警告:mysqli_close()期望参数1为mysqli,布尔值在第152行的 /home/account/public_html/library/class.db.blog.php中给出

有什么解决办法吗?

共有1个答案

伏默
2023-03-14

第一个错误:

PHP警告:mysqli_connect()[function.mysqli连接]:(08004/1040):第19行 /home/account/public_html/library/class.db.blog.php连接太多

如果在尝试连接到mysqld服务器时出现连接过多错误,这意味着其他客户端正在使用所有可用的连接。来源

这个数据库上还有其他服务吗?看起来其他服务使用了所有可用的连接。

第二个错误:

PHP警告:mysqli_close()期望参数1为mysqli,布尔值在第152行的 /home/account/public_html/library/class.db.blog.php中给出

别担心这个。当尝试打开下一个连接并达到连接限制时,mysqli_connection将返回false值。比脚本尝试mysqli_close(false);当你修复第一个问题,第二个也会被修复。

 类似资料:
  • 想改进这个问题吗 通过编辑此帖子,更新问题,使其只关注一个问题。 我被问到这个问题,我不确定我下面的回答是否正确。它可以运行,但是否太混乱了? 考虑给定的代码。 > 解释为什么语句@line7打印0.0。您可以将您的解释写成内联注释 更新代码,使其打印0.5(带解释)。 int i1=1,i2=2;双d3; d3=i1/i2; 系统出来println(((i1/i2)=“d4);}}} 我的回答正

  • 问题内容: 按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我一直在阅读有关使用mysqli与pdo在php中使用mysql的一些问题。 我见过诸如mysqli或PDO之类的问题- 优缺点是什么? 或从mysql移至my

  • 问题内容: 按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 MySQL还是MySQLi哪个更好?又为什么呢 我应该使用哪个? 我的意思是不仅在性能方面,而且在其他任何相关功能方面也更好。 问题答案: 如果您查看MySQL

  • 问题内容: 按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 与MySQL相比,使用MySQLi有什么优势? 问题答案: 见文档: PHP的mysqli扩展是什么? mysqli扩展或MySQL改进的扩展是为了利用MySQ

  • 以下是错误: 这是导致问题的代码区域。 这个错误意味着什么?需要做什么来修复上面的代码?