حدث خطأ عند الاتصال بـ MySQL باستخدام PHP/PDO

StackOverflow https://stackoverflow.com/questions/1819592

  •  10-07-2019
  •  | 
  •  

سؤال

كان الكود الخاص بي يعمل بشكل جيد بالأمس واليوم فجأة لا يريد الاتصال بقاعدة البيانات الخاصة بي.لم أغير أي إعدادات عليه أو على الكود ولم أقم بتحديث أي برنامج أيضًا.كل ما أفعله هو هذا:

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_socketinstead الماضي من 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

  1. ابحث عن ملف mysql.sock الخاص بك.المواقع المشتركة:

    • /tmp/mysql.sock
    • /tmp/mysql/mysql.sock
    • /var/mysql/mysql.sock
    • أو إذا كنت تستخدم MAMP أو LAMP، فابحث داخل مجلد tmp عن mysql
  2. قم بتحرير ملف php.ini الخاص بك وقم بتعيين قيمة pdo_mysql.default_socket بشكل صحيح

  3. أعد تشغيل خادم 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" هنا .

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top