web-dev-qa-db-ja.com

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

私のコードは:

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

データベースが存在し、ログインとパスワードが正しいことを2回確認しました。

Wamppを搭載したWindows PCでコードが正常に機能するため、これは奇妙です。問題の原因がわからない。

何か案が?

13
Maxbester

はい、そのように接続することはできません!

@PLBと@jammypeach mysqliはv4.1以降であり、v3を使用しています:)本当に助けたい場合は、みんなが仕様を読んでください!

ソケットファイルが少し間違っているため、接続できません。古いRHで以前にこの問題があったことを覚えています。ソケットはおそらく/var/mysql/mysql.sockまたは/tmp/mysql.sockですが、1つ以上のアプリが他のアプリを探しています。

あなたが/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', ...

セキュリティに関しては、システムが本当に怖いです。機密データをホストしている場合は、最新バージョンにアップグレードします。

----更新----

Aaahhhh PHP 5.0およびMySQL 3.23 :)

PHP 5には、バージョン4.1より前のMySQLデータベースに接続できないmysqlクライアントがパッケージ化されています。 MySQLはバージョン4.1以降、4.1より前のデータベースと互換性のない新しい方法でパスワードハッシュを使用します。構成の接続先のサーバーはバージョン3.23です。したがって、MySQLの上位バージョンを入手する必要があります。申し訳ありませんが、あなたのケースに他の実用的な解決策はありません。私があなただったら、システム全体をアップグレードして最新のOSバージョンをインストールします。もし私がしなければならなかった場合は、DebianとPHPとMySQLの最新の安定バージョンを使用する必要があります。

37
GTodorov

幸いなことに、これは私にはうまくいきます:

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

解決するのに数時間かかる同様の問題がありました。 Mysql/Mariadbを別のドライブに配置し、PHP=駆動されるWebサイトがデフォルトの場所でソケットを探していました。そのため、シンボリックリンクを作成しましたが、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
2
Code_Help

MAC OSXでmysqlサーバーを再起動するだけです

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

それは私のために働いた

2

MAMPを使用していますが、サンプルの問題があります。 tmpにmysql.sockがないことがわかりました。このコードを使う

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

それは私のために働いた

0
lzdaniel