首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PRESTASHOP:如何告诉PDO类通过套接字而不是“localhost”连接?

问PRESTASHOP:如何告诉PDO类通过套接字而不是“localhost”连接?
EN

Stack Overflow用户
提问于 2015-07-31 00:18:32
回答 2查看 1.7K关注 0票数 3

在Prestashop 1.6.1中,在函数_getPDO中的/classes/db/DbPDO.php中,我看到PDO -- dsn连接字符串是有条件构建的。特别令人感兴趣的是以下片段:

代码语言:javascript
复制
$dsn = 'mysql:';
if ($dbname)
        $dsn .= 'dbname='.$dbname.';';
if (preg_match('/^(.*):([0-9]+)$/', $host, $matches))
        $dsn .= 'host='.$matches[1].';port='.$matches[2];
elseif (preg_match('#^.*:(/.*)$#', $host, $matches))
        $dsn .= 'unix_socket='.$matches[1];
else
        $dsn .= 'host='.$host;

那么,它希望在$host中看到什么,以便将连接类型设置为unix_socket?

我想它是在查看_DB_SERVER_变量在settings.inc.php中。是那么回事吗?目前,我已将其设置为“localhost”。我需要将其更改为什么,以便PDO使用套接字/var/lib/mysql/mysql.sock进行连接?

谢谢你的建议,雷恩

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-11 23:54:23

从代码中看,这似乎是其中的诀窍:

代码语言:javascript
复制
define('_DB_SERVER_', 'unix:/var/lib/mysql/mysql.sock');

在冒号之前发生的事是无关紧要的。重要的是字符串从行的开头开始,有一个文字冒号然后是斜杠(":/"),之后的一切都是套接字文件的绝对路径。因此,此模式需要到套接字的绝对路径。

_DB_SERVER_常量似乎是基于文档配置PrestaShop数据库的规范方法。

票数 3
EN

Stack Overflow用户

发布于 2015-08-12 00:07:03

我不确定我是否明白。但是,首先必须定位mysql套接字文件路径。通常是在my.cnf mysql配置中(在我的Debian:/etc/mysql/my.cnf中)。然后搜索socket条目下的[client]。所以:

代码语言:javascript
复制
# see my.cnf under [client]
$unix_socket = '/var/run/mysqld/mysqld.sock'; 
$user   = 'user';
$passwd = 'secret';
$dsn = 'mysql:unix_socket=' . $unix_socket . ';dbname=dbname';

$pdo = new PDO($dsn, $user, $passwd);

注意,当主机名设置为"localhost“时,默认情况下通过域套接字连接到服务器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31736166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档