【问题标题】:MySQL connection via Unix socket works with mysqli but not with PDO通过 Unix 套接字的 MySQL 连接适用于 mysqli 但不适用于 PDO
【发布时间】:2016-09-30 12:37:34
【问题描述】:

我在我的 Mac OS 10.11.3 上使用 MAMP 5.5.42 和 PHP 5.6.7。代码sn-p如下:

try{
$db = new PDO('mysql:host=localhost:8889;dbname=lacolshow_database;charset=utf8', 'root', 'root');
}
catch (PDOException $e) {
    var_dump($e->getMessage());
}

上面的代码没有引发异常,但会产生一个空的 PDO 对象。

如果在上面的代码中 localhost:8889localhost 替换,则会引发异常并显示消息 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 对象。

【问题讨论】:

    标签: php mysql 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 会自己显示它

    【讨论】:

    • 您建议的内容也会产生一个空的 PDO 对象。此外,我的 PHP 本身并没有显示那些 PDO 异常。如果我不添加 try/catch 的东西,当我请求页面时,我会得到一个空白页面
    • 如果你想显示错误,你必须在你的 php.ini 中打开显示错误
    • 确实,我忘记了
    • ... 或者我也可以将error_reporting(E_ALL); 放在我的 php 代码的开头,对吧?
    • error_reporting 是另一回事。你必须有它,但要显示错误,你必须在代码中添加ini_set('display_errors',1);
    【解决方案2】:

    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 数据库已脱机或访问不正确。 可能是端口或套接字路径不正确。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-02
      • 1970-01-01
      • 2018-02-20
      • 2016-03-21
      相关资源
      最近更新 更多