我在Mac OS 10.11.3上使用MAMP 5.5.42和PHP 5.6.7。代码片段如下:
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对象
port
将进入distinct parameter,而不是进入host
。所以应该是
$db = new PDO('mysql:host=localhost;port=8889;dbname=lacolshow_database;charset=utf8', 'root', 'root');
注意,你不需要捕获和var_dump异常,PHP会自己显示它
1)您需要在连接字符串中添加端口号以连接您的DB。您的数据库服务器在端口no上运行。: 8889
,所以localhost:8889
在DB连接字符串中使用不会引发任何异常。
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服务器建立连接的正确方法。