我刚刚在旧的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上运行良好。我无法弄清楚问题的来源。
有什么想法吗?
答案 0 :(得分:35)
是的,你不能那样连接!
@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找到套接字值,例如插座= / TMP /的mysql.sock 打开你的php.ini文件(也可以在phpinfo()页面上找到'加载配置文件'),并将错误套接字位置的所有出现更改为MySQL中正确的套接字位置。
另一种解决方案(最简单): DSN for PDO:
mysql:unix_socket=/tmp/mysql.sock;dbname=...
的mysql_connect:
$db = mysql_connect('localhost:/tmp/mysql.sock', ...
在安全方面,您的系统非常可怕,如果您托管敏感数据,我会升级到最新版本。
----更新----
Aaahhhh PHP 5.0和MySQL 3.23:)
PHP 5有一个打包的mysql客户端无法连接到低于4.1版的MySQL数据库。 从版本4.1开始,MySQL使用一种新的密码散列方式,与4.1之前的数据库不兼容。您的配置连接的服务器是版本3.23。所以你需要让自己获得更高版本的MySQL。抱歉,您的案例没有其他实用的解决方案。如果我是你,我会升级整个系统并安装最新的操作系统版本,如果我不得不使用Debian和最新的稳定版本的PHP和MySQL。
答案 1 :(得分:2)
在MAC OSX上只需重新启动mysql服务器
sudo /usr/local/mysql/support-files/mysql.server restart
它对我有用
答案 2 :(得分:2)
幸运的是,这对我很有用:
$db = mysql_connect('localhost:/var/lib/mysql/mysql.sock', 'Username', 'Password');
答案 3 :(得分:1)
我有一个类似的问题花了我几个小时来解决。我将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
答案 4 :(得分:0)
我使用MAMP并且有样本问题。我发现tmp中没有mysql.sock。所以使用此代码
cd /tmp && ln -s /Applications/MAMP/tmp/mysql/mysql.sock
它对我有用