0

我收到一个错误: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;
    }
}

?>
4

2 回答 2

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;
}

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

于 2012-11-03T18:05:40.350 回答
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);
于 2012-11-03T18:08:20.160 回答