【问题标题】:MySQLi connection inside another class [duplicate]另一个类中的MySQLi连接[重复]
【发布时间】:2014-08-15 02:10:57
【问题描述】:

我有这个代码:

<?php
class DBconnection extends Mysqli {
    public $mysql;
    public function __construct($host, $user, $pass, $db) {
        $mysql = parent::__construct($host, $user, $pass, $db);     
    }
}

$mysql = new DBconnection('localhost', '**', '**', '**');
?>

但我无法在其他班级建立联系。

<?php
require_once('./mysqli.php');

class Activator {
    private $key;
    public $status;

    public function __construct($key) {
        $this->key = $key;
        $this->status = array();

        $this->activate();
    }

    private function activate() {
        $query = $mysql->query("SELECT email, COUNT(email) AS founds FROM activation WHERE activationKey = '".$mysql->real_escape_string($this->key)."' LIMIT 1");

        if($query) {
            $query = $query->fetch_assoc();

            if($query['founds'] == 0) {
                $this->status['error'] = 'Deze code is verlopen of ongeldig.';
            } else {
                if($mysql->query("UPDATE users SET activation = '1' WHERE email = '".$mysql->real_escape_string($query['email'])."'")) {
                    $this->status['res'] = 'Uw account is geactiveerd!';
                } else {
                    $this->status['error'] = 'Oeps, een fout! Neem contact op per email als dit over 5 minuten nog steeds zo is. Exuses voor het ongemak.';
                }
            }
        } else {
            $this->status['error'] = 'Oeps, een fout! Neem contact op per email als dit over 5 minuten nog steeds zo is. Exuses voor het ongemak.';
        }
    }
}
?>

我怎样才能让它工作?

这是错误:

致命错误:无法在第 6 行的 /home/raoul/domains/internetfaq.nl/public_html/dev/mysqli.php 中重新声明类 DBconnection

【问题讨论】:

  • 错误信息说你试图定义同一个类两次。

标签: php class syntax-error


【解决方案1】:

您需要在课堂内提供$mysqli。由于范围,它不可用。这可以通过将其作为参数传递给activate() 方法来克服:

private function activate($mysqli) {

并调用:

$activator->activate($mysqli);

您不应该多次声明该类。将该类定义放在其自己的文件中,然后将该文件包含在需要它的每个页面上。

DBconnection.php

<?php
class DBconnection extends Mysqli {
public $mysql;
public function __construct($host, $user, $pass, $db) {
    $mysql = parent::__construct($host, $user, $pass, $db);     
}
}

file1.php

<?php
require_once('DBconnection.php');
$mysql = new DBconnection('localhost', '**', '**', '**');
 ?>

file2.php

<?php
require_once('DBconnection.php');
$mysql = new DBconnection('localhost', '**', '**', '**');
 ?>

有更好的方法可以做到这一点,但这会让你走上更好组织代码的道路。

【讨论】:

  • 查看我的更新答案
猜你喜欢
  • 1970-01-01
  • 2022-01-05
  • 2015-05-10
  • 1970-01-01
  • 1970-01-01
  • 2020-11-28
  • 2017-09-22
相关资源
最近更新 更多