15

古い 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 でコードが正常に動作するため、これは奇妙です。問題の原因がどこにあるのかわかりません。

何か案が?

4

5 に答える 5

42

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

@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間違ったソケットの場所を MySQL から正しいソケットの場所に移動します。

別の解決策 (最も簡単): PDO の DSN:

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

mysql_connect:

$db = mysql_connect('localhost:/tmp/mysql.sock', ...

セキュリティに関して言えば、あなたのシステムは本当に恐ろしいです。機密データをホストしている場合は、最新バージョンにアップグレードします.

- - アップデート - -

ああ、PHP 5.0 と MySQL 3.23 :)

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

于 2012-09-25T14:20:45.147 に答える
2

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

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

それは私のために働いた

于 2014-05-29T06:06:07.603 に答える
2

同様の問題があり、解決するのに数時間かかりました。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
于 2017-03-15T19:45:24.120 に答える