【问题标题】:how to connect to database when server is in Unix socket?当服务器在 Unix 套接字中时如何连接到数据库?
【发布时间】:2013-11-21 17:39:43
【问题描述】:

我与数据库 (phpmyadmin) 的连接有问题,这只是因为我的服务器在 UNIX 套接字中。我不知道如何连接到它(我站在窗户上)。如果我的服务器在 TCP/IP 中,下面的代码可以正常工作。

我的代码

<?php

define('DB_SERVER', 'localhost');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', 'xxxxxx');
define('DB_DATABASE', 'sample_db');
$connection = mysql_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD) or die(mysql_error());
$database = mysql_select_db(DB_DATABASE, $connection) or die(mysql_error());
mysql_set_charset("utf8", $connection);

?>

如果服务器在 UNIX 套接字中,谁能告诉我如何连接到数据库?

提前致谢

【问题讨论】:

    标签: mysql phpmyadmin


    【解决方案1】:

    我对你的问题有点困惑。

    我站在窗边

    你的意思是你的 PHP 代码是在 MSWindows 机器上运行的吗?

    我的服务器在 UNIX 中

    如果数据库服务器和数据库客户端 (PHP) 在不同的机器上运行,则它们无法通过 UNIX 文件系统套接字进行通信。

    如果我的服务器在 TCP/IP 中,下面的代码可以正常工作。

    不,您的解释或您对事件的描述不正确。如果您在 libmysql 客户端(包括 PHP 的 mysql_ 扩展)中指定 'localhost' 作为目标主机,则客户端将尝试通过 (Unix) 文件系统套接字进行连接。哦。如果您指定 127.0.0.1,它将使用 TCP 套接字。

    在前一种情况下,客户端从 ~/.my.cnf 获取套接字的路径,或者在没有该文件 /etc/my.cnf 的情况下,或者如果您自己编译了客户端库,$前缀/etc/my.cnf

    【讨论】:

    • 对不起我不清楚的问题。我不确定我也必须问的真正问题是什么。我注意到的是,当在点服务器上打开 phpmyadmin (本地机器)时,它说:服务器:通过 TCP/IP 的本地主机。但是当我在点服务器上打开 phpmyadmin(托管)时,它说:服务器:通过 UNIX 套接字的 localhost。那么我上面的代码不能通过 UNIX 套接字应用于 Server: Localhost。
    • 我认为问题在于您没有为套接字提供正确的。您的服务提供商应该能够提供此信息。
    【解决方案2】:

    hostname + : + /path/to/socket 是必填项

    来自http://us2.php.net/function.mysql-connect的代码sn-p

     $link = mysql_connect('localhost:/path/to/socket', 'mysql_user', 'mysql_password');
    

    你的情况

    define('DB_SERVER', 'localhost:/path/to/socket');
    

    仅供参考,如果你想使用 TCP 套接字

    $link = mysql_connect('hostname:port', 'mysql_user', 'mysql_password');
    

    【讨论】:

    • 当我尝试使用它时,它说:Can't connect to local MySQL server through socket '/path/to/socket' (2)
    • @user2738520 将 /path/to/socket 替换为您的真实路径。如果你不知道在哪里......在 mysql 控制台中运行show variables like '%socket%'
    【解决方案3】:

    只需删除本地主机。

    define('DB_SERVER', '');
    

    或者:

    $connection = mysql_connect(DB_USERNAME, DB_PASSWORD) or die(mysql_error())
    

    【讨论】:

    • 它会给你什么错误?您可以使用控制台连接到数据库吗?
    【解决方案4】:

    在 Unix 中,你也可以用同样的方式连接到服务器

         $con = mysql_connect("host","username","password to connect toserver") or die("!server);
         $db  = mysql_select_db("yourdatabase",$con) or die("!db");
    

    【讨论】:

      猜你喜欢
      • 2015-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多