如果数据库没有连接则创建函数然后注销用户

时间:2013-08-03 06:16:20

标签: php

我有以下用于连接数据库的代码。当某些连接无法连接时,我看到很多错误。好吧,我已经隐藏了error_reporting(0);,但我知道它不是解决方案。

db.php中

class DB {
    protected $db_name = 'demo';
    protected $db_user = 'root';
    protected $db_pass = 'root';
    protected $db_host = 'localhost';   
    public function connect() {
        $connection = mysql_connect($this->db_host, $this->db_user, $this->db_pass);
        mysql_select_db($this->db_name);
        return true;
    }

然后我有一个文件 inc.php ,我在每个页面都包含这个文件。

require_once 'db.php';
$db = new DB();
$db->connect();
//start the session
session_start();

现在我感到很困惑,包括die('Could not connect: ' . mysql_error());我想要header("Location: logout.php");,如果无论如何连接都死了。

谢谢

4 个答案:

答案 0 :(得分:1)

我认为如果连接和选择数据库操作成功,connect函数返回$connection对象会更好,如果其中任何一个失败,则返回false。然后在您的调用页面/函数中检查结果是否为$connection,如果是,则继续,否则执行重定向。

如下所示:

public function connect() {
    $connection = mysql_connect($this->db_host, $this->db_user, $this->db_pass);
    if (!($connection && mysql_select_db($this->db_name, $connection)) {
        // Log the error mysql_error()
        return false;
    } 

    return $connection;
}

在你的呼叫页面/功能中:

$connection = $db->connect();
if (!$connection) {
    header("LOCATION: logout.php"); exit();
}

// Use your $connection variable here onwards where required.

最后请注意,mysql_扩展程序已弃用。开始使用mysqliPDO

答案 1 :(得分:1)

mysql_select_db成功时返回TRUE,失败时返回FALSE。

public function connect() {
    $connection = mysql_connect($this->db_host, $this->db_user, $this->db_pass);
    return mysql_select_db($this->db_name);
}

然后是你的inc.php

require_once 'db.php';
$db = new DB();
if (!$db->connect()) {
    header("LOCATION: logout.php"); exit();
}
//start the session
session_start();

答案 2 :(得分:1)

替换:

public function connect() {
    $connection = mysql_connect($this->db_host, $this->db_user, $this->db_pass);
    mysql_select_db($this->db_name);
    return true;
}  

致:

public function connect() {
    $connection = mysql_connect($this->db_host, $this->db_user, $this->db_pass);
    if(!$connection){
        //die('Could not connect: ' . mysql_error());
        return false
    }if(!mysql_select_db($this->db_name)){
        return false;
    }
    return true;
}  

inc.php

require_once 'db.php';
$db = new DB();
$con = $db->connect();
if(!$con){
    header("Location:logout.php");
    exit();
}

答案 3 :(得分:1)

如果未建立连接,则$ connection将等于FALSE,因此:

if( $connection === FALSE ) {
    die( "Could not connect: " . mysql_error() );
}

但是,不推荐使用mysql_ *函数。如果您正在使用现有的应用程序,那么最好的快速选择是将所有mysql_ *函数替换为mysqli_ *对应函数。如果这是一个新的应用程序,我强烈建议切换到PDO。您的connect语句如下所示:

$connection = new PDO( "mysql:dbname={$this->db_name};host={$this->db_host}", $this->db_user. $this->db_pass );

如果连接失败,则抛出PDOException。您可以找到有关建立PDO连接和捕获错误的更多信息here