【问题标题】:How can I access PDO in MAMP?如何在 MAMP 中访问 PDO?
【发布时间】:2014-09-28 15:44:15
【问题描述】:

我正在测试脚本中设置 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?

【问题讨论】:

    标签: php pdo phpunit


    【解决方案1】:

    在基于 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 可能使用的开放套接字:error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)'

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

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

    【讨论】:

    • 我相信我在套接字模式下运行,因为我可以使用 localhost 在其他任何地方访问 pdo。我尝试了127.0.0.1,但是连接被拒绝了。
    【解决方案2】:

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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-15
    • 2015-01-07
    • 2015-05-29
    • 2020-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多