php - 通过 Unix 套接字的 MySQL 连接适用于 mysqli,但不适用于 PDO

标签 php mysql pdo

我在 Mac OS 10.11.3 上使用 MAMP 5.5.42 和 PHP 5.6.7。代码片段如下:

try{
$db = new PDO('mysql:host=localhost:8889;dbname=lacolshow_database;charset=utf8', 'root', 'root');
}
catch (PDOException $e) {
    var_dump($e->getMessage());
}

上面的代码没有引发异常,但生成一个空的 PDO 对象。

如果在上面的代码中将 localhost:8889 替换为 localhost,则会引发异常并显示消息 SQLSTATE[HY000] [2002] 没有这样的文件或目录

如果上面代码中的 localhost:8889 被替换为 127.0.0.1,则会引发异常并显示消息 SQLSTATE[HY000] [2002] 连接被拒绝

感谢任何帮助。

更新:如果我使用 mysqli 而不是 PDO,连接就可以工作:

$mysqli=mysqli_connect('localhost', 'root', 'root', 'lacolshow_database', NULL, '/Applications/MAMP/tmp/mysql/mysql.sock');

遵循http://php.net/manual/en/pdo.construct.php第二条评论中给出的建议,我尝试了以下方法:

$dsn = 'mysql:dbname=lacolshow_database;unix_socket=/Applications/MAMP/tmp/mysql/mysql.sock';
$db = new PDO($dsn,'root', 'root');

但这也失败了,生成了一个空的 PDO 对象。

最佳答案

port is going into distinct parameter ,而不是进入主机。所以应该是这样

$db = new PDO('mysql:host=localhost;port=8889;dbname=lacolshow_database;charset=utf8', 'root', 'root');

请注意,您不必捕获并 var_dump 异常,PHP 会自行向您显示

关于php - 通过 Unix 套接字的 MySQL 连接适用于 mysqli,但不适用于 PDO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39791715/

相关文章:

即使我已经指定了使用类,也找不到 PHP 命名空间和使用 fatal error 类

php和mysql统计量

php - 使用 pdo 和复选框更新多行

php - 使用多个 PHP 类的最佳方法是什么?

随机 mysql 行的 PHP 问题

php - 如何删除php中的第一个和最后一个空格

mysql - 我如何使用 laravel 中的联合来创建查询搜索

mysql - SQL - 按列 1 分组,按列 2 排序

php - 根据表的一列对MySQL查询的结果进行分组

php - joomla 下拉菜单中的几个月数据