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

Php mysql_connect():没有这样的文件或目录,php,mysql,redhat,mysql-connect,Php,Mysql,Redhat,Mysql Connect,我刚刚在一个旧的RedHat7上安装了一个MySQL服务器(版本3.23.58)。由于依赖关系,我无法安装较新的MySQL版本。我无法在此RedHat服务器上更新Libraries 但是,我在用PHP连接数据库时遇到了一个问题。首先我使用PDO,但我意识到PDO与MySQL 3.23不兼容 所以我使用了mysql\u connect()。现在我有以下错误: Warning: mysql_connect(): No such file or directory in /user/local/apa

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

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

所以我使用了
mysql\u 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上运行良好。我想不出问题出在哪里


有什么想法吗?

是的,你不能那样连接

@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\u连接:

$db = mysql_connect('localhost:/tmp/mysql.sock', ...
你的系统在安全方面真的很可怕,如果你托管敏感数据,我会升级到最新版本

----更新----

aaahhh PHP 5.0和MySQL 3.23:)

PHP5打包了一个mysql客户端,无法连接到低于版本4.1的mysql数据库。
从版本4.1开始,MySQL使用了一种新的密码散列方式,与4.1之前的数据库不兼容。您的配置连接到的服务器是版本3.23。因此,您需要获得更高版本的MySQL。对不起,对于你的情况没有其他切实可行的解决办法。如果我是你,我会升级整个系统并安装最新的操作系统版本,如果必须的话,我会使用Debian以及PHP和MySQL的最新稳定版本。

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

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

它对我有效

幸运的是,它对我有效:

$db = mysql_connect('localhost:/var/lib/mysql/mysql.sock', 'Username', 'Password');

我有一个类似的问题,花了我几个小时来解决。我将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

我使用MAMP,但存在样本问题。我发现tmp中没有mysql.sock。所以使用这个代码

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

这对我来说很管用

开始使用PDO或mysqli_*而不是mysql_*@PLB:你读过这个问题了吗?或者仅仅是代码?如果你坚持使用mysql 3.x和它的
mysql_*
函数,很快就会被弃用,您可能需要检查您的
php.ini
是否启用了
php\u mysql
扩展。为了您的利益,我真的希望这个系统不会暴露在互联网上。听起来它可能在十秒钟内破裂。MySQL 3.2非常陈旧,充满漏洞,RedHat 7无法修补以确保安全,这是不可能的。这两款软件都已经有12年的历史了;请尝试
mysqli\u connect()
以防万一。其次,尝试连接到
127.0.0.1
。第三,打开命令提示符并运行
which mysql
,然后用
ps-ef | grep mysql
检查进程列表以检查它是否已安装并正在运行。
没有这样的文件或目录
似乎表明mysql不是PHP所认为的那样,或者它没有安装或配置错误。在规范中发现得很好-不过,在我的辩护中,我将这些建议作为评论发布,因为我不确定是否可以发布答案。如果我有时间阅读MySQL版本的规范,我可能也会发布一个答案;)尝试更新!我的错@jammypeach接受我的道歉,我不想侮辱你@GTodorov/tmp中没有套接字,目录/var/mysql不存在。错了吗?在phpinfo页面中,mysql.default_socket没有值。顺便说一下,不要担心安全问题。这台计算机没有连接到公共网络,里面绝对没有重要数据。我意识到缺乏安全感;)aaahhh PHP 5.0:)PHP 5打包了一个mysql客户端,无法连接到低于版本4.1的mysql数据库。从版本4.1开始,MySQL使用了一种新的密码散列方式,与4.1之前的数据库不兼容。您的配置连接到的服务器是版本3.23。所以,你需要为自己准备一个更高版本的MySQL。这些信息是我成功使用MariaDB的关键。phpMyAdmin已连接,但
mysqli\u connect()
无法连接。我使用上面的
phpinfo()
获得了套接字文件的预期位置,并创建了一个符号链接(
ln-s…
),以匹配phpMyAdmin报告的
socket
变量。谢谢,@GTodorov!