Hata PHP / MySQL PDO kullanarak bağlanırken

5 Cevap php

Benim kod dün tüm ince çalışıyordu ve bugün aniden sadece benim veritabanına bağlanmak istemiyorum. Bunun üzerine ya da kod üzerinde hiçbir ayarları değişti ve ben de herhangi bir yazılım güncel değil. Ben yaptığım bu:

new PDO('mysql:host=localhost;port=3306;dbname=test', 'username', 'password');

Ve ben bu söyleyerek güzel bir durum iletisi alabilirsiniz:

Warning: PDO::__construct(): [2002] No such file or directory (trying to connect via unix:///tmp/mysql.sock) in ...

Şey: Ben açıkça bir unix soket kullanan ancak TCP / IP kullanarak bağlanmaya çalışıyorum değilim. Ben yanlış ne yapıyorum? Ben burada eksik bir şey var mı?

Herhangi bir yardım için teşekkür ederiz.

5 Cevap

Eğer Unix soket kullanıyor. "Localhost" okurken MySQL istemci kütüphaneleri TCP ana "localhost" olarak yorumlamak ve bu adı çözümlemek ancak varsayılan Socket konumu kullanmayın. Yerel makinede TCP kullanarak hostname olarak 127.0.0.1 kullanmak zorunda.

DSN yerine host geçmiş kullanımını unix_socket belirtmek için. Için kullanılan yuva yeri localhost derleme zamanında ya da pdo_mysql.default_socket php.ini kullanılan PHP bazı sürümlerinde de tanımlanabilir.

PDO kullanarak MySQL bağlantısı hakkında PHP belgelerine Gönderen: PDO_MYSQL DNS

Çok sonunda notu şöyle diyor:

Sadece Unix:

When the host name is set to "localhost", then the connection to the server is made thru a domain socket. If PDO_MYSQL is compiled against libmysql then the location of the socket file is at libmysql's compiled in location. If PDO_MYSQL is compiled against mysqlnd a default socket can be set thru the pdo_mysql.default_socket setting.

Yani bu düzeltmek için düzgün php.ini sizin mysql.sock konumunu yapılandırmak zorunda kalacak

  1. Lütfen mysql.sock dosyasını bulun. Ortak yerler:

    • / Tmp / mysql.sock
    • / Tmp / mysql / mysql.sock
    • / Var / mysql / mysql.sock
    • veya mysql için tmp klasörünün içindeki için MAMP veya LAMBA göz kullanıyorsanız
  2. Lütfen php.ini dosyasını düzenleyin ve düzgün pdo_mysql.default_socket için değerini ayarlayın

  3. Pikap Apache sunucusunu yeniden başlatın php.ini dosyasında değişiklikler

Ben sadece bu satırı eklendi:

'unix_socket'   => '/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock',

ve tüm iyi oldu.

Belgelenmiştir drush için dokümanlar için bir güncelleme var here.