2009-11-30 14 views
26

का उपयोग कर 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 ...

बात है: मैं स्पष्ट रूप से एक यूनिक्स सॉकेट का उपयोग कर कनेक्ट करने का प्रयास नहीं कर रहा हूँ लेकिन टीसीपी/आईपी का उपयोग कर। मैं क्या गलत कर रहा हूं? क्या मैं यहाँ कुछ याद कर रहा हूँ?

किसी भी मदद के लिए धन्यवाद।

+2

में इस सेटिंग का उपयोग कर सकते हैं जांच लिया है कि अपने mysql सर्वर चल रहा है? –

+0

संबंधित/डुप्ले: [चेतावनी: mysql_connect \ (\): \ [2002 \] ऐसी कोई फ़ाइल या निर्देशिका \ (यूनिक्स के माध्यम से कनेक्ट करने का प्रयास नहीं: ///tmp/mysql.sock \)] (http: // stackoverflow .com/q/4219970) – blahdiblah

उत्तर

79

आप यूनिक्स सॉकेट का उपयोग कर रहे हैं। "लोकलहोस्ट" पढ़ते समय MySQL क्लाइंट लाइब्रेरी इसे टीसीपी होस्ट "लोकलहोस्ट" के रूप में नहीं समझते हैं और उस नाम को हल करते हैं लेकिन डिफ़ॉल्ट सॉकेट स्थान का उपयोग करते हैं। स्थानीय मशीन पर टीसीपी का उपयोग करने के लिए आपको होस्ट नाम के रूप में 127.0.0.1 का उपयोग करना होगा।

डीएसएन में host के बजाय पिछले उपयोग unix_socket निर्दिष्ट करने के लिए। localhost के लिए उपयोग की जाने वाली सॉकेट का स्थान php.ini में pdo_mysql.default_socket का उपयोग करके संकलित समय या PHP के कुछ संस्करणों में परिभाषित किया जा सकता है।

+0

लेकिन क्या इसे अक्षम करने का कोई तरीका नहीं है? मेरा मतलब है, यह कल ठीक तरह से काम कर रहा था। और मैं सर्वर पर सॉकेट कैसे सक्षम कर सकता हूं ताकि यह काम करे? –

+0

मेरे पास कॉन्फ़िगरेशन फ़ाइल में 'लोकलहोस्ट' के साथ काम करने वाली PHP स्क्रिप्ट थीं, और रैम अपग्रेड और रीबूट के बाद, उन्होंने कंसोल से ट्रिगर होने पर काम करना बंद कर दिया - अभी भी ब्राउज़र में काम किया है। 'लोकहोस्ट' को '127.0.0.1' में बदलकर इसे ठीक किया गया। –

+0

127.0.0.1 चाल चल रही थी। धन्यवाद! – Antony

7

MySQL के लिए कनेक्शन के बारे में पीएचपी प्रलेखन से पीडीओ का उपयोग कर: PDO_MYSQL DNS

अंत में टिप्पणी कहते हैं:

केवल यूनिक्स:

जब होस्ट नाम पर सेट है "स्थानीय होस्ट ", तो सर्वर से कनेक्शन डोमेन सॉकेट के माध्यम से किया जाता है। यदि PDO_MYSQL libmysql के विरुद्ध संकलित किया गया है तो सॉकेट फ़ाइल का स्थान libmysql के स्थान पर संकलित है। यदि PDO_MYSQL को mysqlnd के विरुद्ध संकलित किया गया है तो डिफ़ॉल्ट सॉकेट को pdo_mysql.default_socket सेटिंग के माध्यम से सेट किया जा सकता है।

तो इस आपने ठीक तरह से कॉन्फ़िगर करना होगा ठीक करने के लिए अपनी mysql.sock के स्थान

  1. अपने mysql.sock फ़ाइल का पता लगाएं php.ini। आम स्थानों:

    • /tmp/mysql.sock
    • /tmp/mysql/mysql.sock
    • /var/mysql/mysql.sock
    • या यदि आप के अंदर के लिए MAMP या दीपक नज़र का उपयोग mysql के लिए tmp फ़ोल्डर
  2. संपादित अपने php.ini फ़ाइल और ठीक से pdo_mysql.default_socket के लिए मान सेट

  3. Php में परिवर्तनों को पिकअप करने के लिए अपने अपाचे सर्वर को पुनरारंभ करें।आईएनआई फ़ाइल

0

ड्रश के लिए दस्तावेज़ों में एक अद्यतन है जो here दस्तावेज है।

2

मैं सिर्फ इस लाइन कहा:

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

और सब कुछ ठीक था।

+3

आपने यह लाइन कहां जोड़ा? –

1

उबंटू पर, आप php.ini

pdo_mysql.default_socket=/var/run/mysqld/mysqld.sock