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/........

1つのファイルで実行すれば、問題なく動作します。

私の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 に答える