2008-08-05 16 views
24

मैं निम्न त्रुटि हो रही है: निम्नलिखित कोड का उपयोग करते समयMySQL/अपाचे त्रुटि

Access denied for user 'apache'@'localhost' (using password: NO)

:

<?php 

include("../includes/connect.php"); 

$query = "SELECT * from story"; 

$result = mysql_query($query) or die(mysql_error()); 

echo "<h1>Delete Story</h1>"; 

if (mysql_num_rows($result) > 0) { 
    while($row = mysql_fetch_row($result)){ 
      echo '<b>'.$row[1].'</b><span align="right"><a href="../process/delete_story.php?id='.$row[0].'">Delete</a></span>'; 
     echo '<br /><i>'.$row[2].'</i>'; 
    } 
} 
else { 
    echo "No stories available."; 
} 
?> 

connect.php फ़ाइल है मेरी MySQL कॉल यह ठीक काम कर रहे हैं कनेक्ट सॉफ़्टवेयर के दूसरे हिस्से में मेरे INSERT क्वेरी के साथ। अगर मैं $result = mysql_query लाइन पर टिप्पणी करता हूं, तो यह अन्य कथन के माध्यम से जाता है। तो, यह उस पंक्ति या सामग्री में है।

मैं किसी भी समाधान के लिए नेट खोज रहा हूं, और अधिकांश बहुत से MySQL कनेक्शन से संबंधित प्रतीत होते हैं या उपयोगकर्ता मैं MySQL में लॉग इन कर रहा हूं क्योंकि अनुमति नहीं है। मैंने दोनों की जांच की है। मैं अभी भी सॉफ्टवेयर में कहीं और अन्य प्रश्नों को निष्पादित कर सकता हूं, और मैंने सत्यापित किया है कि खाते में सही अनुमतियां हैं।

उत्तर

12

And if it matters at all, [email protected] is not the name of the user account that I use to get into the database. I don't have any user accounts with the name apache in them at all for that matter.

यदि यह 'अपाचे @ लोकलहोस्ट' कह रहा है तो उपयोगकर्ता नाम MySQL कनेक्शन पर सही ढंग से पारित नहीं हो रहा है। 'apache' आमतौर पर वह उपयोगकर्ता होता है जो httpd प्रक्रिया (कम से कम Redhat- आधारित सिस्टम पर) चलाता है और यदि कनेक्शन के दौरान कोई उपयोगकर्ता नाम पारित नहीं किया जाता है तो MySQL कनेक्शन का कॉल करने वाले किसी भी व्यक्ति का उपयोग करता है।

यदि आप अपनी स्क्रिप्ट में सही कनेक्शन करते हैं, तो एक फ़ाइल में नहीं, क्या आपको एक ही त्रुटि मिलती है?

2

बस जांचने के लिए, यदि आप का उपयोग करते हैं तो बस इस भाग में आपको कोई त्रुटि मिलती है?

<?php 
include("../includes/connect.php"); 

$query = "SELECT * from story"; 
$result = mysql_query($query) or die(mysql_error()); 

यदि हां, तो आपको अभी भी त्रुटि है, तो आप कॉपी हो जाते हैं और इस पेज में उन आवेषण में से एक पेस्ट है, मैं अगर यह पेज या कि वास्तविक लाइन के लिए स्थानीय है देखने के लिए कोशिश कर रहा हूँ।

इसके अलावा, क्या आप कनेक्शन कॉल (शून्य पासवर्ड) की एक प्रति पोस्ट कर सकते हैं, जब तक कि इस उदाहरण के रूप में सम्मिलन बिल्कुल उसी वाक्यविन्यास का उपयोग न करें।

2

क्या apache उपयोगकर्ता को डेटाबेस से कनेक्ट करने के लिए पासवर्ड की आवश्यकता है? यदि ऐसा है, तो यह तथ्य है कि "पासवर्ड का उपयोग करके: नहीं" मुझे विश्वास दिलाएगा कि कोड पासवर्ड के बिना कनेक्ट करने का प्रयास कर रहा है।

यदि, हालांकि, अपाचे उपयोगकर्ता को पासवर्ड की आवश्यकता नहीं होती है, तो अनुमतियों की एक डबल-चेक एक अच्छा विचार हो सकता है (जिसे आपने पहले ही चेक किया है)। यह अभी भी एक mysql प्रॉम्प्ट पर कुछ इस तरह क्रियान्वित करने की कोशिश के लिए फायदेमंद हो सकता है:

GRANT ALL PRIVILEGES ON `*databasename*`.* to 'apache'@'localhost'; 

कि वाक्य रचना सही होना चाहिए।

इसके अलावा, मैं उतना ही स्टंप हूं जितना आप हैं।

+0

मुझे नहीं लगता कि यह वास्तव में एक अच्छा समाधान है। यह कहने जैसा है कि अगर आपने एक कार बनाई है जहां स्टीयरिंग व्हील गिर जाता है और लोग पेड़ में दुर्घटनाग्रस्त हो जाते हैं, तो समाधान पेड़ को हटाना होगा। कनेक्शन के साथ यह निश्चित रूप से एक मुद्दा है जो ठीक से शुरू नहीं हो रहा है। – nickf

1

यदि आप वास्तव में एक ही कनेक्शन कॉल का उपयोग करके सम्मिलित करने में सक्षम हैं, तो आपकी समस्या सबसे अधिक संभावना है उपयोगकर्ता "apache" डेटाबेस पर चयन अनुमति नहीं है। यदि आपके पास phpMyAdmin इंस्टॉल है तो आप Privileges फलक में उपयोगकर्ता के लिए अनुमतियां देख सकते हैं। phpMyAdmin भी अनुमतियों को संशोधित करना बहुत आसान बनाता है।

यदि आपके पास केवल कमांड लाइन तक पहुंच है, तो आप mysql डेटाबेस से अनुमतियां देख सकते हैं।

आप शायद की तरह कुछ करने की आवश्यकता होगी:

GRANT चुनी गईं myDatabase.myTable के लिए 'अपाचे' @ 'स्थानीय होस्ट';

1

Just to check, if you use just this part you get an error?

If so, do you still get an error if you copy and paste one of those Inserts into this >page, I am trying to see if it's local to the page or that actual line.

Also, can you post a copy of the connection calls (minus passwords), unless the inserts >use exactly the same syntax as this example.

कनेक्शन.php फ़ाइल में क्या है। मैंने फाइल से एक ही फैशन में शामिल किया है जहां मैं कोड में कहीं और INSERT क्वेरी निष्पादित करता हूं।

$conn = mysql_connect("localhost", ******, ******) or die("Could not connect"); 
mysql_select_db("adbay_com_-_cms") or die("Could not select database"); 

मैं इस क्षेत्र में यह जांचने के लिए काम कर रहे INSERT क्वेरी को आजमाउंगा।

दूसरों को पासवर्ड पहुंच के बारे में पोस्ट करने के लिए। जैसा कि मैंने अपनी पहली पोस्टिंग में कहा है, मैंने अनुमतियों की जांच की है। मैंने phpMyAdmin का उपयोग यह सत्यापित करने के लिए किया था कि उपयोगकर्ता खाते के लिए अनुमतियां सही थीं। और यदि यह बिल्कुल मायने रखता है, तो apache @ localhost उपयोगकर्ता खाते का नाम नहीं है जिसका उपयोग मैं डेटाबेस में प्राप्त करने के लिए करता हूं। मेरे पास उस मामले के लिए उन सभी में अपाचे नाम के साथ कोई उपयोगकर्ता खाता नहीं है।

2

अपने डेटाबेस त्रुटि लॉग को जांचना न भूलें। आपको यह देखने में सक्षम होना चाहिए कि क्या आप डीबी को भी मार रहे हैं या नहीं। यदि आप नहीं हैं, तो आपको बॉक्स पर अपने फ़ायरवॉल नियमों की जांच करनी चाहिए। एक लिनक्स बॉक्स पर आप फ़ायरवॉल सूची नियम प्राप्त करने के लिए iptables -L चला सकते हैं।

अन्यथा यह एक शुद्ध पहुंच समस्या होगी। यह देखने के लिए कि apache उपयोगकर्ता वहां भी स्थापित है या नहीं, "mysql.user से" चुनें। इसके अलावा, मैं विशेष रूप से अपाचे का उपयोग करने के विरोध में आपके ऐप के लिए एक खाता बनाने की अनुशंसा करता हूं, क्योंकि आपके द्वारा बनाए गए किसी अन्य ऐप को डिफ़ॉल्ट रूप से अपाचे के रूप में चलाया जाएगा, और आपके डीबी में अनधिकृत पहुंच प्राप्त हो सकती है।

अधिक जानकारी प्राप्त करने के लिए प्रलेखन @ dev.mysql.com में बस "अनुदान" देखें। यदि आपके पास डीबी के बारे में अधिक विशिष्ट खोज है, तो बस अपना प्रश्न संपादित करें, और मैं एक नज़र डालेगा।

2

क्या connect.php स्क्रिप्ट वास्तव में कनेक्शन बनाती है या क्या यह केवल एक फ़ंक्शन को परिभाषित करती है जिसे आपको कनेक्शन बनाने के लिए कॉल करने की आवश्यकता होती है? आपको जो त्रुटि मिल रही है वह पहले से स्थापित कनेक्शन नहीं होने का लक्षण है।

ईटीए: इसमें एक आवश्यकता के लिए भी शामिल करें। मुझे संदेह है कि यह वास्तव में फ़ाइल सहित बिल्कुल नहीं है। लेकिन शामिल चुपचाप विफल हो सकता है।

4

शामिल() की आवश्यकता() को बदलें। यदि "connect.php" फ़ाइल की आवश्यकता नहीं हो सकती है() डी, स्क्रिप्ट को घातक त्रुटि के साथ विफल कर देगी, जबकि में शामिल हैं() केवल एक चेतावनी उत्पन्न करता है। यदि आप जिस उपयोगकर्ता नाम से mysql_connect() पर जा रहे हैं, तो "अपाचे" नहीं है, कनेक्ट स्क्रिप्ट का गलत पथ इस प्रकार की त्रुटि प्राप्त करने का सबसे आम तरीका है।

2

दोस्त उत्तर एक बड़ा डीयूएच है! दुर्भाग्य से मुझे यह पता लगाने में थोड़ी देर लग गई। आपके पास शायद dbconnect() जैसे फ़ंक्शन हैं और आप कनेक्शन बनाने के लिए फ़ाइल शामिल करने से चर का उपयोग कर रहे हैं। $ conn = mysql_connect ($ dbhost, $ dbuser, $ dbpass)।

ठीक है क्योंकि यह एक फ़ंक्शन के अंदर है, फ़ाइल को शामिल करने के चर को फ़ंक्शन में पास करने की आवश्यकता है या अन्यथा फ़ंक्शन को पता नहीं होगा कि $ dbhost, $ dbuser और $ dbpass है। इसे ठीक करने का एक तरीका उन चर को वैश्विक बनाना है ताकि आपके कार्य उन्हें उठा सकें। एक और समाधान जो बहुत सुरक्षित नहीं है, आपको होस्ट, उपयोगकर्ता और mysql_connect फ़ंक्शन में पास करना होगा।

उम्मीद है कि यह मदद करता है लेकिन मुझे एक ही समस्या थी।

+0

धन्यवाद! मैंने आखिरकार चीजों को समझ लिया, और बाद में एक विशाल बेवकूफ की तरह महसूस किया। रवींद्र! कभी-कभी, मेरे पास लगता है कि मेरे क्षण हैं। फिर से धन्यवाद! – Mesidin

1

आप निम्न में से एक कर सकते हैं:

  • उपयोगकर्ता "अपाचे" और सेटअप एक खोल पर phpmyadmin या mysql का उपयोग करने से उसके विशेषाधिकार
  • बताएँ php अन्य उपयोगकर्ता के रूप mysql_connect चलाने के लिए जोड़ें, कोई है जो पहले से ही विशेषाधिकारों की आवश्यकता है (लेकिन शायद रूट नहीं), mysql.default_user को अपनी php.ini फ़ाइल में देखें।
1

आपको बस इतना करना याद किया था: उपयोगकर्ता तो सेट नहीं है

flush privileges; 

यदि यह 'अपाचे' दे देंगे @ त्रुटि 'स्थानीय होस्ट'।

+0

शायद आपका उत्तर एक टिप्पणी के रूप में बेहतर दिया गया है। – boisvert