Rumah >pangkalan data >tutorial mysql >Mengapa sambungan PDO saya melalui TCP gagal dengan ralat \'Tiada fail atau direktori sedemikian\' merujuk kepada soket Unix?

Mengapa sambungan PDO saya melalui TCP gagal dengan ralat \'Tiada fail atau direktori sedemikian\' merujuk kepada soket Unix?

Barbara Streisand
Barbara Streisandasal
2024-11-02 13:45:03529semak imbas

 Why is my PDO connection via TCP failing with a

Amaran: Sambungan PDO melalui TCP Gagal Tanpa Fail atau Direktori Sebegitu (unix:///tmp/mysql.sock)

Di tengah-tengah usaha pengekodan kami , bukan sesuatu yang luar biasa untuk menghadapi pengecualian membingungkan yang nampaknya muncul entah dari mana. Pertimbangkan senario ini:

Saya cuba menyambung ke pangkalan data menggunakan PDO, tetapi saya mendapat mesej ralat samar ini:

Amaran: PDO::__construct(): [2002] Tiada fail atau direktori sedemikian (cuba menyambung melalui unix:///tmp/mysql.sock) dalam ...

Walaupun parameter sambungan TCP yang ditentukan, sistem nampaknya sedang mencuba untuk menyambung melalui soket Unix. Adalah penting untuk membetulkan isu ini untuk mewujudkan sambungan pangkalan data yang stabil. Jadi, apa yang silap?

Punca Masalah

Isu terasnya terletak pada tafsiran nama hos "host tempatan". Secara lalai, perpustakaan klien MySQL menganggap "localhost" merujuk kepada soket Unix dan bukannya nama hos TCP. Untuk menentukan sambungan TCP secara eksplisit, anda mesti menggunakan alamat IP "127.0.0.1" dan bukannya "localhost" sebagai nama hos.

Sebagai alternatif, anda boleh menentukan laluan soket Unix secara eksplisit dalam DSN menggunakan parameter unix_socket bukannya parameter hos.

Menyelesaikan Isu

Untuk menyelesaikan isu ini, pastikan anda menggunakan nama hos yang betul ("127.0.0.1") atau nyatakan laluan soket Unix secara eksplisit dalam DSN itu. Selain itu, semak sama ada laluan soket ditakrifkan dengan betul dalam fail php.ini anda (jika berkenaan).

Contoh DSN Menggunakan Alamat IP:

<code class="php">$dsn = 'mysql:host=127.0.0.1;port=3306;dbname=test';</code>

Contoh DSN Menggunakan Laluan Soket Unix:

<code class="php">$dsn = 'mysql:unix_socket=/tmp/mysql.sock;dbname=test';</code>

Dengan melaksanakan pelarasan ini, anda boleh mewujudkan sambungan pangkalan data yang stabil dan mengurangkan ralat "Tiada fail atau direktori sedemikian" dengan berkesan.

Atas ialah kandungan terperinci Mengapa sambungan PDO saya melalui TCP gagal dengan ralat \'Tiada fail atau direktori sedemikian\' merujuk kepada soket Unix?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn