连接到PHP中的非标准MySQL套接字

用PHP连接到MySQL数据库通常不是一件容易的事,实际上,这是许多教程首先要做的事情之一。但是,在某些情况下,需要比标准主机,密码和用户名详细信息更多的信息。一个很好的例子是通过不同的(或至少是非标准的)套接字连接到本地MySQL服务器时。在Linux安装中,MySQL套接字的通常放置位置是/var/run/mysqld/mysqld.sock,但是某些主机可能会对此进行更改。

php.inipdo_mysql,mysql和mysqli部分中存在一个名为default_socket的文件,如果需要将PHP指向其他套接字,则应首先使用这些设置。还有一些名为MYSQL_SOCKET和MYSQLI_SOCKET的系统常量,它们由PHP在编译时使用正确指定的“ --with-mysql”设置创建。一些配置不当的主机将无法正确编译PHP或未设置这些变量,因此在尝试连接到“ localhost”时可能会遇到问题。

在阅读了一段时间后,我在互联网上发现很多关于如何创建所有这些设置以及在连接到MySQL数据库时它们如何影响PHP的困惑。如果您将“ localhost”指定为服务器名称,则将使用MYSQL_SOCKET(以及类似的MYSQLI_SOCKET)。在这种情况下,PHP通过套接字而不是通过TCP / IP进行通信。这可能仅在标准位置查找套接字文件。

我已经读到,如果mysql.default_socket指定了该设置,那么将使用该设置而不是MYSQL_SOCKET设置。我的经验是事实并非如此,而是优先使用MYSQL_SOCKET设置。如果您有任何其他经验,我将不胜感激。

尝试连接到未正确配置的本地主机时,在创建与数据库的连接时需要设置套接字位置。标准的MySQL库和新的MySQLi类在这里的工作略有不同。假设新的套接字位置是/a/random/directory/mysqld.sock,我们可以使用以下方法之一连接到数据库。

$connection = mysql_connect('localhost:3306/a/random/directory/mysqld.sock', 'username', 'password');
 
$mysqli = new mysqli('localhost', 'username', 'password', "", 3306, '/a/random/directory/mysqld.sock');

这看起来并不难,但是对于以前从未见过此事的人(即,我),php.net文档在此问题上有点令人困惑。