古い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でコードが正常に機能するため、これは奇妙です。問題の原因がわからない。
何か案が?
はい、そのように接続することはできません!
@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の最新の安定バージョンを使用する必要があります。
幸いなことに、これは私にはうまくいきます:
$db = mysql_connect('localhost:/var/lib/mysql/mysql.sock', 'Username', 'Password');
解決するのに数時間かかる同様の問題がありました。 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
MAC OSXでmysqlサーバーを再起動するだけです
Sudo /usr/local/mysql/support-files/mysql.server restart
それは私のために働いた
MAMPを使用していますが、サンプルの問題があります。 tmpにmysql.sockがないことがわかりました。このコードを使う
cd /tmp && ln -s /Applications/MAMP/tmp/mysql/mysql.sock
それは私のために働いた