2016-09-30 38 views
0

我在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:8889127.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对象。

回答

1

port is going into distinct parameter,而不是host。所以它应该是

$db = new PDO('mysql:host=localhost;port=8889;dbname=lacolshow_database;charset=utf8', 'root', 'root'); 

注意,你没有赶上和的var_dump异常,PHP会告诉你它本身

+0

你的建议还产生一个空的PDO对象。另外,我的PHP不会自己显示这些PDO异常。如果我不添加try/catch的东西,当我请求页面时,我会看到一个空白页 –

+0

如果你想要显示错误,你必须在你的php.ini中打开显示错误 –

+0

事实上,我忘了这个 –

1

1)您需要添加的连接的端口号字符串与您的数据库连接。您的数据库服务器在您的本地环境中的端口号为8889上运行,因此数据库连接字符串中使用的localhost:8889不会引发任何异常。

2)如果更换localhost:8889通过localhost则连接将无法建立,并与消息SQLSTATE[HY000] [2002] No such file or directory一个错误将发生指示经由套接字一个MySQL连接尝试(不被支持)。

3)当您使用127.0.0.1的连接将尝试,但会被拒绝,SQLSTATE[HY000] [2002] Connection refused.这意味着SQL数据库是脱机或不正确地访问。 也许是不正确的端口或套接字路径。

因此,第一点是与DB服务器建立连接的正确方法。

相关问题