php - 如何在 MAMP 中访问 PDO?

标签 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] No such file or directory.

我如何在这里使用 PDO?

最佳答案

在基于 Unix(如 linux、bsd 或 OS X)的系统中,MySQL localhost 是 try-to-use-a-socket 的密码,除非你通过协议(protocol)强制它标记不要这样做(而且从来没有人这样做过)。请记住 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";

关于php - 如何在 MAMP 中访问 PDO?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25147970/

相关文章:

php preg_match 在标志处

PHP 单元测试 : should tests be under the same namespace as the class?

Phpunit 找不到抽象类

phpunit - 如何在 phpUnit 中的所有测试中传播setUp和tearDown?

php - 如何防止 css 文件中的图像被缓存?

php - 限制登录时删除非现有用户保存的失败尝试

php - 从数据库中获取今天日期的数据

MySQL基于当前行查询行

php - 在 PDO 中动态 WHERE 子句查询后计算特定行

php - 通过 PHP 表单在数据库中插入值