我正在测试脚本中设置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?
答案 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');