15

我刚刚在旧的 RedHat7 上安装了 MySQL 服务器(版本 3.23.58)。由于依赖关系,我无法安装更新的 MySQL 版本。我无法更新此 RedHat 服务器上的库。

但是,我在使用 PHP 连接到数据库时遇到问题。首先我使用 PDO,但我意识到 PDO 与 MySQL 3.23 不兼容......

所以我用mysql_connect(). 现在我有以下错误:

Warning: mysql_connect(): No such file or directory in /user/local/apache/htdocs/php/database.php on line 9
Error: No such file or directory

我的代码是:

$host = 'localhost';
$user = 'root';
$password = '';
$database = 'test';
$db = mysql_connect($host, $user, $password) or die('Error : ' . mysql_error());
mysql_select_db($database);

我检查了两次数据库是否存在并且登录名和密码正确。

这很奇怪,因为代码在我的带有 Wampp 的 Windows PC 上运行良好。我无法弄清楚问题出在哪里。

任何的想法?

4

5 回答 5

42

是的,你不能那样连接!

@PLB 和 @jammypeach mysqli 在 v4.1 之后,他正在使用 v3 :) 如果您真的想提供帮助,请阅读规范!

您无法连接,因为您的套接字文件有点错误。我现在记得旧的RH以前有这个问题。您的套接字可能是 /var/mysql/mysql.sock 或 /tmp/mysql.sock 但一个或多个应用程序正在寻找另一个。

如果你的是 /tmp/mysql.sock 但没有 /var/mysql/mysql.sock 你应该:

cd /var 
mkdir mysql
cd mysql
ln -s /tmp/mysql.sock mysql.sock

如果你有 /var/mysql/mysql.sock 但没有 /tmp/mysql.sock 那么:

cd /tmp
ln -s /var/mysql/mysql.sock mysql.sock

您需要权限才能进行更改。只需 sudo,如果需要,在上述命令之前!

另一个解决方案(更简单):

创建文件并调用 phpinfo(); 寻找'mysql.default_socket';或'pdo_mysql.default_socket';打开 My.ini 或 My.cnf 找到套接字值,例如 socket=/tmp/mysql.sock 打开您的 php.ini 文件(在您的 phpinfo() 页面上也可以找到“加载的配置文件”)并更改所有出现将错误的套接字位置从 MySQL 转移到正确的套接字位置。

另一个解决方案(最简单):PDO 的 DSN:

mysql:unix_socket=/tmp/mysql.sock;dbname=...

mysql_connect:

$db = mysql_connect('localhost:/tmp/mysql.sock', ...

你的系统在安全方面真的很可怕,如果你托管敏感数据,我会升级到最新版本。

- - 更新 - -

啊啊啊啊 PHP 5.0 和 MySQL 3.23 :)

PHP 5 有一个打包的 mysql 客户端,它无法连接到低于 4.1 版本的 MySQL 数据库。从 4.1 版开始,MySQL 使用了一种与 4.1 之前的数据库不兼容的新密码散列方式。您的配置连接到的服务器是 3.23 版。所以你需要给自己一个更高版本的 MySQL。抱歉,您的情况没有其他实用的解决方案。如果我是你,我会升级整个系统并安装最新的操作系统版本,如果必须的话,我会选择 Debian 和最新的稳定版本的 PHP 和 MySQL。

于 2012-09-25T14:20:45.147 回答
3

幸运的是,这对我来说效果很好:

$db = mysql_connect('localhost:/var/lib/mysql/mysql.sock', 'Username', 'Password');
于 2015-10-27T07:15:01.707 回答
2

在 MAC OSX 上只需重新启动 mysql 服务器

sudo /usr/local/mysql/support-files/mysql.server restart

它对我有用

于 2014-05-29T06:06:07.603 回答
2

我有一个类似的问题,花了我几个小时才解决。我将 Mysql / Mariadb 放在一个单独的驱动器上,PHP 驱动的网站正在寻找默认位置的套接字。所以,我创建了一个符号链接,但我认为 SELinux 不会给予许可。所以,然后我将这些行添加到 /etc/php.ini 文件中并且它可以工作。

pdo_mysql.default_socket = /data/mysql/mysql.sock
mysql.default_socket = /data/mysql/mysql.sock
mysqli.default_socket = /data/mysql/mysql.sock
于 2017-03-15T19:45:24.120 回答
0

我使用 MAMP 并且有示例问题。我发现tmp中没有mysql.sock。所以使用这个代码

cd /tmp && ln -s /Applications/MAMP/tmp/mysql/mysql.sock

它对我有用

于 2017-10-31T02:24:42.920 回答