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

Posted

技术标签:

【中文标题】从 PHP 类和 DBMS 技术创建 PDO 连接字符串【英文标题】:Creating a PDO connection string from PHP class and DBMS techniques 【发布时间】:2013-12-12 08:43:15 【问题描述】:

这是我的程序说明。我试图创建一个具有不同方法的数据库连接类,这些方法在从数据库中提取记录的方式上有所不同。

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

问题是:我想我用于创建 PDO 对象的连接字符串是正确的,但它会显示错误提示 Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [2002] Can't connect to local MySQL 服务器通过 socket '/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 ...
        


?>

【问题讨论】:

php可以没有没有参数的构造函数吗?像 java 一样? 【参考方案1】:

清除空格:

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

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

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

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

所以尝试使用127.0.0.1 而不是localhost 作为主机名,或者查看here。

【讨论】:

以上是关于从 PHP 类和 DBMS 技术创建 PDO 连接字符串的主要内容,如果未能解决你的问题,请参考以下文章

PHP中如何使用PDO修改数据?

PHP实现的pdo连接数据库并插入数据功能简单示例

PHP - 使用命名空间创建 PDO 连接

使用 ODBC 使用 msaccess 创建 PHP PDO 连接时出现致命错误

PDO增删改查

PDO扩展使用方法