PDO和分类收到'PDOException'错误

时间:2012-11-03 18:03:10

标签: php mysql pdo

我收到错误:Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)' in /home/content/........

如果我在一个文件中执行它,它可以正常工作!

我的php文件:

<?php
require 'includes/dbc.php';

$dbc = new dbc();
$db = $dbc->openDb();
$stmt = $dbc->getAllUsers($db);

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    echo $row['iduser'];
}
?>

我的数据库类:

<?php

class dbc {

    public $dbserver = '';
    public $dbusername = '';
    public $dbpassword = '';
    public $dbname = '';

    function openDb() {

        $db = new PDO('mysql:host=' . $dbserver . ';dbname=' . $dbname . ';charset=utf8', '' . $dbusername . '', '' . $dbpassword . '');
        return $db;
    }

    function getAllUsers($db) {
        $stmt = $db->query("SELECT * FROM user");
        return $stmt;
    }
}

?>

2 个答案:

答案 0 :(得分:1)

在您提供的示例代码中,您没有指定数据库连接字符串的数据库,用户,密码或主机:

function openDb() {
    $db = new PDO('mysql:host=' . $dbserver . ';dbname=' . $dbname . ';charset=utf8', '' . $dbusername . '', '' . $dbpassword . '');
    return $db;
}

使用无效数据时,您的代码无法连接,因此您收到连接错误。

由于它们是dbc类的全球,因此您在访问它们时需要使用$this(例如$this->dbserver)。尝试将代码更新为:

function openDb() {
    $db = new PDO('mysql:host=' . $this->dbserver . ';dbname=' . $this->dbname . ';charset=utf8', '' . $this->dbusername . '', '' . $this->dbpassword . '');
    return $db;
}

*此外,虽然您可能已将其删除以发布问题,但您也没有将这些变量设置为实际值。

答案 1 :(得分:0)

您忘了定义数据库设置?我总是使用以下内容来使用PDO类进行连接。

/** Define database propperties **/
define('DB_HOST', 'localhost', true);
define('DB_USER', 'user_db', true);
define('DB_PASS', 'yoursuperpass', true);
define('DB_DATA', 'data_www', true); 

$dbInstance = new PDO('mysql:dbname='.DB_DATA.';host='.DB_HOST, DB_USER, DB_PASS);
$dbInstance->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbInstance->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);