mysql_connect():没有这样的文件或目录

Max*_*ter 13 php mysql redhat mysql-connect

我刚刚在旧的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
Run Code Online (Sandbox Code Playgroud)

我的代码是:

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

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

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

任何的想法?

GTo*_*rov 36

是的,你不能那样连接!

@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
Run Code Online (Sandbox Code Playgroud)

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

cd /tmp
ln -s /var/mysql/mysql.sock mysql.sock
Run Code Online (Sandbox Code Playgroud)

您需要具有进行更改的权限.只需sudo,如果需要在上面的命令之前!

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

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

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

mysql:unix_socket=/tmp/mysql.sock;dbname=...
Run Code Online (Sandbox Code Playgroud)

的mysql_connect:

$db = mysql_connect('localhost:/tmp/mysql.sock', ...
Run Code Online (Sandbox Code Playgroud)

在安全方面,您的系统非常可怕,如果您托管敏感数据,我会升级到最新版本.

----更新----

Aaahhhh PHP 5.0和MySQL 3.23 :)

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

  • 我使用PHP而不是Java,但无论如何,谢谢! (3认同)
  • 很好地发现了规格 - 在我的防守中,我发布了这些建议作为评论,因为我不确定是否发布了答案.如果我有时间阅读该版本MySQL的规格,我可能也会发布一个答案;) (2认同)
  • 这些信息是我成功使用 MariaDB 的关键。phpMyAdmin 已连接,但 `mysqli_connect()` 不会。我使用上面的 `phpinfo()` 获得了套接字文件的预期位置,并创建了一个符号链接 (`ln -s ...`) 以匹配 phpMyAdmin 报告的 `socket` 变量。谢谢,@GTodorov! (2认同)