我收到错误: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;
}
}
?>
答案 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);