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