繁体   English   中英

如何在 MAMP 中访问 PDO?

[英]How can I access PDO in MAMP?

我正在测试脚本中设置 PDO 连接:

use app\SomeDAO;

class SomeTest extends \PHPUnit_Framework_TestCase
{
    protected $db;

    public function setUp()
    {
        $dsn = "mysql:host=localhost;dbname=baseball;user=root;password=root";
        $this->db = new PDO($dsn);
    }

我收到一个错误:

PDOException: SQLSTATE[HY000] [2002] 没有这样的文件或目录。

我如何在这里使用 PDO?

在基于 Unix(如 linux、bsd 或 OS X)的系统中,MySQL localhost是 try-to-use-a-socket 的秘密代码,除非您通过协议标志强制它不这样做(并且没有人永远做这个)。 请记住localhost通常等于套接字文件。

如果您的 MAMP 中的 Mysql 在非套接字模式下运行,您可以尝试用127.0.0.1替换主机值,该值通过 TCP 通过端口连接到本地机器——如果它不是默认端口。

如果您查看 MAMP 启动脚本

  less /Applications/MAMP/bin/startMysql.sh

您可以查看它是否以套接字模式启动,以及如果它具有如下配置参数,则它正在使用什么文件:

  --socket=/Applications/MAMP/tmp/mysql/mysql.sock 

您还可以按照以下问题的答案调查 mysql 可能正在使用的开放套接字: 错误:'无法通过套接字'/var/run/mysqld/mysqld.sock'(2)'连接到本地 MySQL 服务器

如果您在套接字模式下运行,则需要确保 PDO 知道套接字文件的路径。 一种方法是在 dsn 中指定unix_socket而不是主机:

  $dsn =  "mysql:unix_socket=/Applications/MAMP/tmp/mysql/mysql.sock;dbname=baseball;user=root;password=root";

我在 MAMP 遇到过这样的问题。 我决定了,当我与 PDO 连接时,我使用了下一行代码:

$this->pdo = new \PDO("mysql:unix_socket=/Applications/MAMP/tmp/mysql/mysql.sock;port=8889;dbname=mydatabase;charset=utf8", 'root', 'root');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM