0

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

数据库.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

4 回答 4

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

于 2013-08-03T06:20:57.523 回答
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();
于 2013-08-03T06:21:00.207 回答
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;
}  

公司.php

require_once 'db.php';
$db = new DB();
$con = $db->connect();
if(!$con){
    header("Location:logout.php");
    exit();
}
于 2013-08-03T06:24:04.617 回答
1

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

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

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

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

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

于 2013-08-03T06:25:38.197 回答