سؤال

أنا لا يمكن أن يبدو للاتصال mysql مع php النصي, على الرغم من أنني يمكن الاتصال على ما يرام مع بريس.أنا خلقت المستخدم مع كلمة السر ، وأعطاه السليم الامتيازات بالنسبة ديسيبل ، ولكن في كل مرة أنه يربط فإنه يموت يقول تم رفض الوصول.أنا باستخدام xampp على ويندوز xp مربع.جدران الحماية يتم تعطيل كافة ، ولقد تم فحص اسم المستخدم nad كلمة المرور صحيحة.هنا كود:

$conn=mysql_connect('localhost','westbrookc16','megadots') || die (mysql_error());

هل أسماء المستخدمين يجب أن تكون في شكل معين أو شيء ما ؟

هل كانت مفيدة؟

المحلول

ولدي حدس أن المشكلة هنا هي المضيف الذي منح له، على الرغم من انها في الحقيقة ليست أكثر من مجرد تخمين. إذا منح حق الوصول myuser@'127.0.0.1 'أو عنوان IP الخوادم الفعلية، لن يسمح لك الاتصال باستخدام المضيف المحلي بوصفها البلد المضيف. ويرجع ذلك إلى حقيقة أنه عندما يتم تحديد "مضيف" باعتبارها البلد المضيف، وفب نفترض أنك تريد استخدام مأخذ يونيكس بدلا من مآخذ الشبكة، وذلك في سياق 127.0.0.1 ليست هي نفسها كما المضيف المحلي.

من الإدخال اليدوي لل mysql_connect () :

<اقتباس فقرة>   

ملحوظة: كلما قمت بتحديد "مضيف"   أو "مضيف: منفذ" كخادم، و   سوف مكتبة العميل الخلية تجاوز   هذا ومحاولة الاتصال محلية   مقبس (يسمى أنبوب على ويندوز). اذا أنت   تريد استخدام TCP / IP، استخدم "127.0.0.1"   بدلا من "مضيف". إذا كانت الخلية   تحاول مكتبة العميل للاتصال   خطأ مأخذ المحلي، يجب عليك تعيين   المسار الصحيح كما تكوين وقت التشغيل   في التكوين PHP وإجازة   الحقل فارغا الخادم.

وهذا الأمل ليس زائدة عن الحاجة تماما. :)

نصائح أخرى

ولقد رأيت هذا من قبل، حيث يسجل مستخدم واحد في الخلية عبر PHP وآخر لا. أحيانا المستخدم حتى يعمل من سطر الأوامر ولكن ليس من بي.

ولقد كان دائما ما ريكر إميل اثنين. مستخدم الخلية هو حقا زوج المستخدم / المضيف. هكذا يتم سرد megadots المستخدم @ المضيف المحلي وmegadots المستخدم @ mycoolhost في الجدول mysql.user عن اثنين من سجلات منفصلة.

إذا يمكنك الدخول من سطر الأوامر تشغيل هذا الاستعلام.

SELECT user, host FROM mysql.user

وسترى قائمة كاملة من المستخدمين والمضيفين ثير.

وإذا كنت تعترف المستخدم بريس أن يعمل، أن ننظر في العمود المضيف الذي من المحتمل أن يكون المضيف الذي تريد استخدامه.

ولإعادة تشغيل المضيف هذه الاستعلامات (! توخي الحذر عند القيام بذلك العمل الخاص بك مع الجدول privilages لتركيب الخلية بأكمله)

update mysql.user set host = 'hostname' 
where user = 'username' and host = 'oldhostname';

flush privileges;

إذا كنت ترى رقما قياسيا مع اسم المستخدم و٪ بوصفها البلد المضيف التي سيكون لها الأولوية على كل شيء آخر، إذا كان هناك سجلات متعددة للمستخدم و٪ لاستضافة واحد منهم، فمن الممكن أن اسم المستخدم مع٪ كما المضيف لديه كلمة مرور خاطئة ومهما manytimes إعادة تعيين كلمة المرور اسم المستخدم @ المضيف المحلي لانها غير صالحة لأنها سوف بالمقارنة مع اسم المستخدم @٪ على الدخول.

إذا كنت تستخدم لينكس استخدام حزمة مدير متشابك لإيجاد وتحميل جميع المكتبات وتعديل وأن PHP و MySQL تحتاج حتى يتمكنوا من كلا الاتصال. كانت مشكلتي أن PHP تشغيل البرامج النصية وحده عملت على جانب الملقم ولكن عندما حاولت استخدام البرامج النصية PHP للاتصال الخلية فإنه لا ربط أود أن أرى سوى صفحة بيضاء واضحة. ثم لاحظت أنني لم يكن لديها مكتبات عميل الخلية التي تستخدم PHP لكونكت إلى الخلية. لم يكن لدي سوى المكتبات خادم MySQL. مرة واحدة تثبيت مكتبات العميل وإعادة تشغيل الخادم اباتشي كانت كتاباتي PHP أي مشكلة في الاتصال. افتراضيا PHP 5 لا يأتي المثبتة مع المكتبات العميل الخلية.

في حالتي، اتضح كنت قد حذف المستخدم الذي تم استخدامه لإنشاء قاعدة البيانات كنت تستخدم. عادة هذا يجب أن تعطي "محددا المستخدم المحدد غير موجود 'خطأ، ولكن لسبب انها ببساطة إعادة الوصول أعم نفى لقانون بلدي PHP. لست متأكدا لماذا لا يزال من الممكن الدخول من خلال سطر الأوامر واجهات أخرى. لتصحيح مشكلتي أنا صوغه المستخدم الذي تم حذفه.

وهذا سيكون إما خطأ مطبعي أو لم تكن قد منحهم امتيازات. أحيانا يمكن أن يكون من الصعب بشكل مخيف على الفور هذه.

وأقترح عدم استخدام بريس لكن تحميل نسخة من SQLYOG (الطبعة المجتمع الحر عظيم)، ومحاولة للدخول مع المستخدم عن طريق ذلك. وبمجرد الانتهاء من تشخيص القضية هناك نسخ / لصق اسم المستخدم / كلمة المرور إلى السيناريو الخاص بك.

وبالمناسبة بريس على ما يرام، ولكن برنامج مثل sqlyog عموما أكثر ملاءمة، لذلك تستحق التدقيق بها على أي حال - أنا متأكد من أنك سوف يتم تحويلها. إذا sqlyog ليست واردة على ذوقك وهناك العديد من البدائل المجانية والتجارية الأخرى.

<اقتباس فقرة>   

ووأعطتها امتيازات المناسبة لديسيبل

وكيف؟ ما المضيفة التي استخدمتها للمستخدم عند منح ذلك؟

وهذا هو كيف يتم ذلك عادة:

GRANT ALL ON mydb.* TO 'someuser'@'somehost' identified by 'password';
FLUSH privileges;

في الخاص بك somehost "حالة ربما ينبغي" المضيف المحلي 'أو' 127.0.0.1 '(انظر وظيفة أخرى)

وبناء الجملة إشارة: http://dev.mysql.com/ وثيقة / RefMan معلومات / 5.1 / EN / grant.html

بعد أن مشكلة مماثلة وجدت أن استبدال '127.0.0.1' مع 'localhost' لم خدعة (على الرغم من حقيقة أن كنت قادرا على الاتصال بنجاح عبر المحطة باستخدام 'localhost').

وكان لي نفس المشكلة، ولكن بعد ذلك أنا أحسب أنه من أنه إذا ترك في الحسابات الافتراضية مع '٪' (أي مضيف)، NO PASSWORD ثم انك لا يمكن الاتصال مع كلمة مرور. لست متأكدا ما هي المشكلة بالضبط لكن إزالتها من حلها.

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