php mysql_连接():无此文件或目录

vuv7lop3  于 2022-12-25  发布在  PHP
关注(0)|答案(6)|浏览(165)

我刚刚在旧的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上运行良好。我找不出问题出在哪里。
你知道吗?

von4xj4u

von4xj4u1#

是的,你不能这样连接!
@PLB和@jammypeach mysqli是v4.1之后,他正在使用v3:)伙计们阅读规格,如果你真的想帮助!
无法连接,因为你的socket文件有一点错误。我现在想起来以前的RH有过这个问题。你的socket可能是/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.默认套接字”;打开My.ini或My.cnf找到套接字值,例如socket=/tmp/mysql.sock打开php.ini文件(也可以在phpinfo()页面找到,名为“已加载的配置文件”),并将所有出现的不正确套接字位置更改为MySQL中的正确套接字位置。
另一种解决方案(最简单):PDO的DSN:

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

mysql连接:

$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。

vwhgwdsa

vwhgwdsa2#

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

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

rmbxnbpk3#

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

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

对我很有效

daolsyd0

daolsyd04#

我也遇到过类似的问题,花了几个小时才解决。我把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
vwkv1x7d

vwkv1x7d5#

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

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

对我很有效

pxiryf3j

pxiryf3j6#

请使用127.0.0.1作为您的主机,而不要使用localhost。

$host = '127.0.0.1';
$user = 'root';
$password = '';
$database = 'test';
$db = mysqli_connect($host, $user, $password) or die('Error : ' . mysqli_error());
$tb = mysqli_select_db($db,$database);

相关问题