如何在MAMP中访问PDO?

时间:2014-08-05 20:44:49

标签: php pdo phpunit

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

2 个答案:

答案 0 :(得分:6)

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

如果你的MAMP中的Mysql在非套接字模式下运行,你可以尝试用通过端口上的TCP连接到本地机器的127.0.0.1替换主机值 - 你需要找出哪个如果它不是默认端口,则它正在运行。

如果你看一下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而不是host:

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

答案 1 :(得分:0)

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

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