حدث خطأ عند الاتصال بـ MySQL باستخدام PHP/PDO
سؤال
كان الكود الخاص بي يعمل بشكل جيد بالأمس واليوم فجأة لا يريد الاتصال بقاعدة البيانات الخاصة بي.لم أغير أي إعدادات عليه أو على الكود ولم أقم بتحديث أي برنامج أيضًا.كل ما أفعله هو هذا:
new PDO('mysql:host=localhost;port=3306;dbname=test', 'username', 'password');
وحصلت على رسالة استثناء لطيفة تقول هذا:
Warning: PDO::__construct(): [2002] No such file or directory (trying to connect via unix:///tmp/mysql.sock) in ...
الشيء هو:من الواضح أنني لا أحاول الاتصال باستخدام مقبس يونكس ولكن باستخدام TCP/IP.ما الخطأ الذي افعله؟هل هناك شيء أفتقده هنا؟
شكرا على اي مساعدة.
المحلول
وأنت تستخدم مقبس يونيكس. عند قراءة "مضيف" مكتبات عميل الخلية لا يفسر على أنه مضيف TCP "مضيف" وحل هذا الاسم ولكن استخدام الموقع المقبس الافتراضية. لاستخدام TCP على الجهاز المحلي لديك لاستخدام 127.0.0.1
كما المضيف.
لتحديد استخدام unix_socket
instead الماضي من host
في DSN. يمكن تعريف موقع مأخذ تستخدم لlocalhost
في وقت الترجمة أو في بعض إصدارات PHP باستخدام pdo_mysql.default_socket
في php.ini
.
نصائح أخرى
من وثائق PHP حول الاتصال بـ MySQL باستخدام PDO: PDO_MYSQL DNS
تقول الملاحظة في النهاية:
يونيكس فقط:
عندما يتم تعيين اسم المضيف على "LocalHost" ، يتم إجراء اتصال الخادم من خلال مقبس المجال.إذا تم تجميع PDO_MYSQL مقابل LIBMYSQL ، فسيكون موقع ملف المقبس في LIBMYSQL المترجمة في الموقع.إذا تم تجميع PDO_MYSQL مقابل mysqlnd ، فيمكن تعيين مقبس افتراضي من خلال إعداد PDO_MYSQL.DEFAULT_SOCKET.
لذا لإصلاح هذه المشكلة، سيتعين عليك تهيئة موقع mysql.sock بشكل صحيح في php.ini
ابحث عن ملف mysql.sock الخاص بك.المواقع المشتركة:
- /tmp/mysql.sock
- /tmp/mysql/mysql.sock
- /var/mysql/mysql.sock
- أو إذا كنت تستخدم MAMP أو LAMP، فابحث داخل مجلد tmp عن mysql
قم بتحرير ملف php.ini الخاص بك وقم بتعيين قيمة pdo_mysql.default_socket بشكل صحيح
أعد تشغيل خادم Apache لالتقاط التغييرات في ملف php.ini
في أوبونتو، يمكنك استخدام هذا الإعداد في ملف php.ini
pdo_mysql.default_socket=/var/run/mysqld/mysqld.sock
وأنا فقط واضاف هذا السطر:
'unix_socket' => '/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock',
وكان كل شيء جيدا.
وهناك تحديثا لمستندات لDrush التي تم توثيقه href="http://drupal.org/node/898152#comment-5338294" هنا .