我在Mac OS 10.11.3上使用MAMP 5.5.42和PHP 5.6.7。代码片段如下:通过Unix套接字的MySQL连接与mysqli协同工作,但不与PDO协同工作
try{
$db = new PDO('mysql:host=localhost:8889;dbname=lacolshow_database;charset=utf8', 'root', 'root');
}
catch (PDOException $e) {
var_dump($e->getMessage());
}
上面的代码不会引发异常,但会产生一个空的PDO对象。
如果localhost:8889
由刚刚localhost
在上面的代码代替,将引发一个例外与消息 SQLSTATE[HY000] [2002] No such file or directory
。
如果localhost:8889
由127.0.0.1
在上面的代码代替,将引发一个例外与消息 SQLSTATE[HY000] [2002] Connection refused
。
任何帮助表示赞赏。
更新:如果我使用的mysqli替代PDO的连接工作:
$mysqli=mysqli_connect('localhost', 'root', 'root', 'lacolshow_database', NULL, '/Applications/MAMP/tmp/mysql/mysql.sock');
继在http://php.net/manual/en/pdo.construct.php第二评论给出的建议,我试过如下:
$dsn = 'mysql:dbname=lacolshow_database;unix_socket=/Applications/MAMP/tmp/mysql/mysql.sock';
$db = new PDO($dsn,'root', 'root');
但也会失败,产生一个空的PDO对象。
你的建议还产生一个空的PDO对象。另外,我的PHP不会自己显示这些PDO异常。如果我不添加try/catch的东西,当我请求页面时,我会看到一个空白页 –
如果你想要显示错误,你必须在你的php.ini中打开显示错误 –
事实上,我忘了这个 –