从PHP类和DBMS技术创建PDO连接字符串

时间:2013-11-26 23:20:54

标签: php mysql security pdo

这是我的节目说明。我尝试创建一个数据库连接类,它具有不同的方法,它们从数据库中提取记录的方式不同。

我要做的是 - 将类属性设置为PDO连接参数并创建具有这些属性的默认构造函数。每当我需要数据时,我都会调用那些应该返回记录的方法。

问题是:我想我的用于创建PDO对象的连接字符串是正确的,但是它会显示错误未捕获异常'PDOException',消息'SQLSTATE [HY000] [2002]无法连接到本地MySQL服务器通过套接字'/var/lib/mysql/mysql.sock'(2)

你能帮我解决一下真的发生了什么吗? 您还可以与我分享创建安全,健壮且可动态访问的数据库类或方法的技术和想法吗?我非常感谢。提前致谢!

代码:

<?php
class DatabaseConnection {

        private $hostname;
        private $dbname;
        private $username;
        private $password;

        public function __construct() {
            $this->hostname = "hostname";
            $this->dbname = "database";
            $this->username ="username";
            $this->password = "password";
        }

        function getDataFromTable($query){
            echo $dns;
            $db = new PDO("mysql:host = {$this->hostname} ; dbname = {$this->dbname}", $this->username, $this->password);
            // stuffs ...
        }
}

?>

1 个答案:

答案 0 :(得分:5)

清除空格:

$db = new PDO(
    "mysql:host={$this->hostname};dbname={$this->dbname};charset=utf8", 
    $this->username,
    $this->password
);

使用PHP&gt; = 5.3.6,您可以将字符集添加到dsn。 (charset=utf8

另一个可能的问题:(http://php.net/manual/de/ref.pdo-mysql.connection.php

  

当主机名设置为“localhost”时,通过域套接字与服务器建立连接。如果针对libmysqlclient编译PDO_MYSQL,则套接字文件的位置位于libmysqlclient的编译位置。如果针对mysqlnd编译PDO_MYSQL,则可以通过pdo_mysql.default_socket设置设置默认套接字。

请尝试使用127.0.0.1代替localhost作为主机名,或者查看here