संदर्भ - PHP में यह त्रुटि क्या है?


Answers

घातक त्रुटि: किसी गैर-ऑब्जेक्ट पर किसी सदस्य फ़ंक्शन को कॉल करें

xyz->method() के समान कोड के साथ होता है जहां xyz कोई ऑब्जेक्ट नहीं है और इसलिए उस method को नहीं कहा जा सकता है।

यह एक घातक त्रुटि है जो स्क्रिप्ट को रोक देगा (आगे संगतता नोटिस: यह PHP 7 से शुरू होने वाली एक आकर्षक त्रुटि बन जाएगी)।

अक्सर यह एक संकेत है कि कोड में त्रुटि स्थितियों के लिए चेक गुम है। मान्य करें कि एक वस्तु वास्तव में अपनी विधियों को कॉल करने से पहले एक वस्तु है।

एक typical उदाहरण होगा

// ... some code using PDO
$statement = $pdo->prepare('invalid query', ...);
$statement->execute(...);

उपर्युक्त उदाहरण में, क्वेरी तैयार नहीं की जा सकती है और prepare() $statement को false सौंपा जाएगा। execute() विधि को कॉल करने का प्रयास करने के परिणामस्वरूप घातक त्रुटि होगी क्योंकि false एक "गैर-वस्तु" है क्योंकि मान एक बूलियन है।

चित्रित करें कि आपके फ़ंक्शन ने ऑब्जेक्ट के बजाय बूलियन क्यों लौटाया। उदाहरण के लिए, हुई अंतिम त्रुटि के लिए $pdo ऑब्जेक्ट की जांच करें। इस पर डीबग करने के तरीके पर विवरण इस बात पर निर्भर करेगा कि प्रश्न में विशेष कार्य / वस्तु / कक्षा के लिए त्रुटियों को कैसे नियंत्रित किया जाता है।

यदि यहां तक ​​कि ->prepare में असफल रहा है तो आपके $pdo डेटाबेस हैंडल ऑब्जेक्ट को मौजूदा दायरे में पारित नहीं किया गया था । यह कहां परिभाषित किया गया है। फिर इसे पैरामीटर के रूप में पास करें, इसे संपत्ति के रूप में स्टोर करें, या इसे वैश्विक दायरे के माध्यम से साझा करें।

एक और समस्या सशर्त रूप से एक वस्तु बना सकती है और फिर उस सशर्त ब्लॉक के बाहर एक विधि को कॉल करने का प्रयास कर सकती है। उदाहरण के लिए

if ($someCondition) {
    $myObj = new MyObj();
}
// ...
$myObj->someMethod();

सशर्त ब्लॉक के बाहर विधि को निष्पादित करने का प्रयास करके, आपकी ऑब्जेक्ट को परिभाषित नहीं किया जा सकता है।

संबंधित सवाल:

  • किसी गैर-ऑब्जेक्ट पर किसी सदस्य फ़ंक्शन पर कॉल करें
  • सभी PHP की सूची "घातक त्रुटि: किसी सदस्य फ़ंक्शन पर कॉल करें ... गैर-ऑब्जेक्ट पर" Stackoverflow पर प्रश्न
Question

यह क्या है?

चेतावनी, त्रुटियों और सूचनाओं के बारे में कई जवाब हैं जो प्रोग्रामिंग PHP के दौरान आपको सामना करना पड़ सकता है और कोई संकेत नहीं है कि कैसे ठीक किया जाए। यह एक सामुदायिक विकी भी है, इसलिए इस सूची को जोड़ने और बनाए रखने में सभी को भाग लेने के लिए आमंत्रित किया जाता है।

ऐसा क्यों है?

"हेडर पहले से भेजे गए" या "गैर-ऑब्जेक्ट के सदस्य को कॉल करना " जैसे प्रश्न स्टैक ओवरफ़्लो पर अक्सर पॉप अप करते हैं। उन प्रश्नों का मूल कारण हमेशा समान होता है। तो उन सवालों के जवाब आम तौर पर उन्हें दोहराते हैं और फिर ओपी को दिखाते हैं कि कौन सी रेखा उसके विशेष मामले में बदल सकती है। ये उत्तर साइट पर कोई मूल्य नहीं जोड़ते हैं क्योंकि वे केवल ओपी के विशेष कोड पर लागू होते हैं। अन्य उपयोगकर्ताओं को एक ही त्रुटि होने से आसानी से समाधान को पढ़ नहीं सकता है क्योंकि वे बहुत स्थानीय हैं। यह दुखद है, क्योंकि एक बार जब आप मूल कारण समझते हैं, तो त्रुटि को ठीक करना मामूली होता है। इसलिए, यह सूची लागू करने के सामान्य तरीके से समाधान की व्याख्या करने की कोशिश करती है।

मुझे यहाँ क्या करना चाहिए?

यदि आपका प्रश्न इस के डुप्लिकेट के रूप में चिह्नित किया गया है, तो कृपया नीचे अपना त्रुटि संदेश ढूंढें और अपने कोड पर फिक्स लागू करें। उत्तरों में आम तौर पर सामान्य उत्तर से स्पष्ट नहीं होने पर जांच के लिए और अधिक लिंक होते हैं।

यदि आप योगदान देना चाहते हैं, तो कृपया अपना "पसंदीदा" त्रुटि संदेश, चेतावनी या नोटिस, प्रति जवाब एक, एक संक्षिप्त वर्णन जिसका अर्थ है (यहां तक ​​कि यदि यह केवल उनके मैन्युअल पृष्ठ पर शर्तों को हाइलाइट कर रहा है), एक संभावित समाधान या डिबगिंग दृष्टिकोण जोड़ें और मौजूदा क्यू एंड ए की एक सूची जो मूल्य के हैं। साथ ही, किसी भी मौजूदा उत्तर में सुधार करने के लिए स्वतंत्र महसूस करें।

सूचि

और देखें




पार्स त्रुटि: वाक्यविन्यास त्रुटि, अप्रत्याशित T_VARIABLE

संभावित परिदृश्य

मुझे लगता है कि मेरा कोड गलत कहां गया है। यहां मेरी पूरी त्रुटि है:

पार्स त्रुटि: वाक्य x पर वाक्यविन्यास त्रुटि, अप्रत्याशित T_VARIABLE

मैं क्या कोशिश कर रहा हूँ

$sql = 'SELECT * FROM dealer WHERE id="'$id.'"';

उत्तर

पार्स त्रुटि: आपके प्रोग्राम के सिंटैक्स के साथ एक समस्या, जैसे किसी कथन के अंत से अर्धविराम को छोड़ना या उपरोक्त मामले की तरह, गायब होना . ऑपरेटर। दुभाषिया आपके प्रोग्राम को चलाने से रोकता है जब यह एक पार्स त्रुटि का सामना करता है।

सरल शब्दों में यह एक वाक्यविन्यास त्रुटि है, जिसका अर्थ है कि आपके कोड में कुछ ऐसा है जो इसे सही ढंग से पार्स किए जाने से रोक रहा है और इसलिए चल रहा है।

आपको क्या करना चाहिए , इस बारे में लाइनों पर सावधानी से जांच करें जहां त्रुटि किसी भी साधारण गलतियों के लिए है।

उस त्रुटि संदेश का अर्थ है कि फ़ाइल के लाइन एक्स में, PHP दुभाषिया एक खुले कोष्ठक को देखने की उम्मीद कर रहा था, लेकिन इसके बजाय, इसे T_VARIABLE नामक कुछ का सामना करना पड़ा। उस T_VARIABLE चीज़ को token कहा जाता है। यह प्रोग्राम के विभिन्न मौलिक भागों को व्यक्त करने का PHP दुभाषिया का तरीका है। जब दुभाषिया किसी प्रोग्राम में पढ़ता है, तो यह आपके द्वारा टोकन की सूची में लिखे गए शब्दों का अनुवाद करता है। जहां भी आप अपने प्रोग्राम में एक चर T_VARIABLE , दुभाषिया की सूची में एक T_VARIABLE टोकन होता है।

अच्छा पढ़ा: पार्सर टोकन की सूची

तो सुनिश्चित करें कि आप अपने php.ini में कम से कम E_PARSE सक्षम करें। पर्स त्रुटियों को उत्पादन स्क्रिप्ट में मौजूद नहीं होना चाहिए।

कोडिंग करते समय, मैंने हमेशा निम्नलिखित कथन जोड़ने की सिफारिश की:

error_reporting(E_ALL);

PHP त्रुटि रिपोर्टिंग

आईडीई का उपयोग करने के लिए भी एक अच्छा विचार है जो आपको टाइप करते समय पार्स त्रुटियों को बताएगा। आप उपयोग कर सकते हैं:

  1. NetBeans (सौंदर्य की अच्छी शांति, मुफ्त सॉफ्टवेयर) (मेरी राय में सबसे अच्छा)
  2. PhpStorm (चाचा गॉर्डन इसे प्यार करता हूँ: पी, भुगतान योजना, मालिकाना और मुफ्त सॉफ्टवेयर शामिल है)
  3. Eclipse (सौंदर्य और जानवर, मुफ्त सॉफ्टवेयर)

संबंधित सवाल:

  • संदर्भ: PHP पार्स / सिंटेक्स त्रुटियां; और उन्हें कैसे हल करें?



घातक त्रुटि: वर्ग [वर्ग का नाम] पुन: वर्गीकृत नहीं कर सकता

घातक त्रुटि: पुन: दावा नहीं कर सकता [फ़ंक्शन नाम]

इसका मतलब है कि आप या तो एक ही फ़ंक्शन / क्लास नाम का दो बार उपयोग कर रहे हैं और उनमें से किसी एक का नाम बदलने की आवश्यकता है, या ऐसा इसलिए है क्योंकि आपने require include require या include जहां आपको require_once या include_once का उपयोग करना चाहिए।

जब PHP में कोई वर्ग या फ़ंक्शन घोषित किया जाता है, तो यह अपरिवर्तनीय है, और बाद में इसे नए मान के साथ घोषित नहीं किया जा सकता है।

निम्नलिखित कोड पर विचार करें:

class.php

<?php

class MyClass
{
    public function doSomething()
    {
        // do stuff here
    }
}

index.php

<?php

function do_stuff()
{
   require 'class.php';
   $obj = new MyClass;
   $obj->doSomething();
}

do_stuff();
do_stuff();

do_stuff() लिए दूसरा कॉल उपर्युक्त त्रुटि उत्पन्न करेगा। require_once require को बदलकर, हम निश्चित हो सकते हैं कि MyClass की परिभाषा वाली फ़ाइल केवल एक बार लोड की जाएगी, और त्रुटि से बचा जाएगा।




चेतावनी: [फ़ंक्शन] : स्ट्रीम खोलने में विफल: [कारण]

ऐसा तब होता है जब आप आमतौर पर फ़ाइल को कॉल, require या fopen द्वारा कॉल करते हैं और PHP फ़ाइल नहीं ढूंढ सका या फ़ाइल लोड करने के लिए पर्याप्त अनुमति नहीं है।

यह कई कारणों से हो सकता है:

  • फ़ाइल पथ गलत है
  • फ़ाइल पथ सापेक्ष है
  • पथ शामिल गलत है
  • अनुमतियां बहुत ही सीमित हैं
  • SELinux बल में है
  • और बहुत सारे ...

एक सामान्य गलती एक पूर्ण पथ का उपयोग नहीं करना है। इसे आसानी से __DIR__ या dirname(__FILE__) जैसे पूर्ण पथ या जादू स्थिरांक का उपयोग करके हल किया जा सकता है:

include __DIR__ . '/inc/globals.inc.php';

या:

require dirname(__FILE__) . '/inc/globals.inc.php';

सही पथ सुनिश्चित करना इन मुद्दों का निवारण करने में एक कदम है, यह गैर-मौजूदा फ़ाइलों से भी संबंधित हो सकता है, फ़ाइल सिस्टम के अधिकारों को रोकने या PHP द्वारा स्वयं आधारित आधार प्रतिबंधों के अधिकार भी हो सकते हैं।

इस समस्या को हल करने का सबसे अच्छा तरीका नीचे समस्या निवारण चेकलिस्ट का पालन करना है।

संबंधित सवाल:

संबंधित त्रुटियां:




चेतावनी: [फ़ंक्शन] पैरामीटर 1 संसाधन होने की अपेक्षा करता है, बूलियन दिया जाता है

( चेतावनी का एक और सामान्य भिन्नता : mysql_fetch_array () पैरामीटर 1 संसाधन होने के लिए उम्मीद करता है, बूलियन दिया गया )

संसाधन PHP में एक type हैं (जैसे स्ट्रिंग्स, पूर्णांक या ऑब्जेक्ट्स)। एक संसाधन एक अपारदर्शी ब्लॉब है जिसमें स्वयं का कोई स्वाभाविक अर्थपूर्ण मूल्य नहीं है। एक संसाधन PHP कार्यों या एक्सटेंशन के एक निश्चित सेट द्वारा विशिष्ट और परिभाषित किया गया है। उदाहरण के लिए, MySQL एक्सटेंशन दो संसाधन प्रकारों को परिभाषित करता है :

MySQL मॉड्यूल में दो संसाधन प्रकार उपयोग किए जाते हैं। The first one is the link identifier for a database connection, the second a resource which holds the result of a query.

The cURL extension defines another two resource types :

... a cURL handle and a cURL multi handle.

When var_dump ed, the values look like this:

$resource = curl_init();
var_dump($resource);

resource(1) of type (curl)

That's all most resources are, a numeric identifier ( (1) ) of a certain type ( (curl) ).

You carry these resources around and pass them to different functions for which such a resource means something. Typically these functions allocate certain data in the background and a resource is just a reference which they use to keep track of this data internally.

The " ... expects parameter 1 to be resource, boolean given " error is typically the result of an unchecked operation that was supposed to create a resource, but returned false instead. For instance, the fopen function has this description:

Return Values

Returns a file pointer resource on success, or FALSE on error.

So in this code, $fp will either be a resource(x) of type (stream) or false :

$fp = fopen(...);

If you do not check whether the fopen operation succeed or failed and hence whether $fp is a valid resource or false and pass $fp to another function which expects a resource, you may get the above error:

$fp   = fopen(...);
$data = fread($fp, 1024);

Warning: fread() expects parameter 1 to be resource, boolean given

You always need to error check the return value of functions which are trying to allocate a resource and may fail :

$fp = fopen(...);

if (!$fp) {
    trigger_error('Failed to allocate resource');
    exit;
}

$data = fread($fp, 1024);

Related Errors:




चेतावनी: प्रभाव में open_basedir प्रतिबंध

यह चेतावनी फ़ाइल और निर्देशिका पहुंच से संबंधित विभिन्न कार्यों के साथ दिखाई दे सकती है। यह एक विन्यास मुद्दे के बारे में चेतावनी देता है।

जब ऐसा प्रतीत होता है, तो इसका मतलब है कि कुछ फ़ाइलों को एक्सेस प्रतिबंधित कर दिया गया है।

चेतावनी स्वयं कुछ भी नहीं तोड़ती है, लेकिन फ़ाइल-एक्सेस को रोका जाने पर अक्सर एक स्क्रिप्ट ठीक से काम नहीं करती है।

फिक्स सामान्य रूप से PHP कॉन्फ़िगरेशन को बदलने के लिए होता है , संबंधित सेटिंग को open_basedir कहा जाता है।

कभी-कभी गलत फ़ाइल या निर्देशिका नामों का उपयोग किया जाता है, तो फ़िक्स सही का उपयोग करने के लिए होता है।

संबंधित सवाल:




Warning: Illegal string offset 'XXX'

This happens when you try to access an array element with the square bracket syntax, but you're doing this on a string, and not on an array, so the operation clearly doesn't make sense .

उदाहरण:

$var = "test";
echo $var["a_key"];

If you think the variable should be an array, see where it comes from and fix the problem there.




Fatal error: [TraitA] and [TraitB] define the same property ([$x]) in the composition of [ClassC]

Occurs when a class attempts to use multiple Traits , where two or more of those Traits have defined a property by the same name, and with the property having differing initial values.

उदाहरण:

<?php
trait TraitA
{
    public $x = 'a';
}
trait TraitB
{
    public $x = 'b';
}
class ClassC
{
    use TraitA, TraitB;
}

Problematic: While it's possible to resolve conflicts between competing methods , there is currently no syntax that would resolve a conflict between two competing properties. The only solution at this time is to refactor ; ie, avoid a conflict between property names that produces a fatal error.

Related Questions:




पार्स त्रुटि: वाक्यविन्यास त्रुटि, अप्रत्याशित T_ENCAPSED_AND_WHITESPACE

डबल-उद्धृत स्ट्रिंग के अंदर इंटरपोलेशन के लिए उद्धृत कुंजी के साथ सरणी मान को संदर्भित करने का प्रयास करते समय यह त्रुटि अक्सर सामना की जाती है, जब संपूर्ण जटिल चर निर्माण {} में संलग्न नहीं होता है।

त्रुटि मामला:

इसके परिणामस्वरूप Unexpected T_ENCAPSED_AND_WHITESPACE :

echo "This is a double-quoted string with a quoted array key in $array['key']";
//---------------------------------------------------------------------^^^^^

संभावित सुधार:

एक डबल-उद्धृत स्ट्रिंग में, PHP सरणी कुंजी स्ट्रिंग्स को बिना उपयोग किए जाने की अनुमति देगा, और E_NOTICE जारी नहीं करेगा। तो उपर्युक्त के रूप में लिखा जा सकता है:

echo "This is a double-quoted string with an un-quoted array key in $array[key]";
//------------------------------------------------------------------------^^^^^

संपूर्ण जटिल सरणी चर और कुंजी को {} में संलग्न किया जा सकता है, इस मामले में उन्हें E_NOTICE से बचने के लिए उद्धृत किया जाना चाहिएPHP दस्तावेज़ जटिल चर के लिए इस वाक्यविन्यास की सिफारिश करता है।

echo "This is a double-quoted string with a quoted array key in {$array['key']}";
//--------------------------------------------------------------^^^^^^^^^^^^^^^
// Or a complex array property of an object:
echo "This is a a double-quoted string with a complex {$object->property->array['key']}";

बेशक, उपर्युक्त में से किसी का भी विकल्प एरे वैरिएबल को इसके बीच इंटरपोलेट करने के बजाय जोड़ना है:

echo "This is a double-quoted string with an array variable " . $array['key'] . " concatenated inside.";
//----------------------------------------------------------^^^^^^^^^^^^^^^^^^^^^

संदर्भ के लिए, PHP स्ट्रिंग्स मैनुअल पेज में वेरिएबल पार्सिंग पर अनुभाग देखें




MySQL: आपके SQL वाक्यविन्यास में आपको एक त्रुटि है; मैन्युअल रूप से उपयोग करने के लिए सही वाक्यविन्यास के लिए आपके MySQL सर्वर संस्करण से मेल खाने वाले मैन्युअल की जांच करें ...

यह त्रुटि अक्सर होती है क्योंकि आप एक MySQL क्वेरी को पारित डेटा से ठीक से बचने के लिए भूल गए हैं।

क्या करना है ("बुरा विचार") का एक उदाहरण:

$query = "UPDATE `posts` SET my_text='{$_POST['text']}' WHERE id={$_GET['id']}";
mysqli_query($db, $query);

यह कोड किसी पृष्ठ में सबमिट करने के लिए एक फॉर्म में शामिल किया जा सकता है, जैसे कि http://example.com/edit.php?id=10 (पोस्ट एन ° 10 संपादित करने के लिए)

क्या होगा यदि सबमिट किए गए टेक्स्ट में सिंगल कोट्स हों? $query समाप्त हो जाएगी:

$query = "UPDATE `posts` SET my_text='I'm a PHP newbie' WHERE id=10';

और जब यह क्वेरी MySQL को भेजी जाती है, तो यह शिकायत करेगी कि वाक्यविन्यास गलत है, क्योंकि बीच में एक अतिरिक्त एकल उद्धरण है।

ऐसी त्रुटियों से बचने के लिए, आपको क्वेरी में उपयोग करने से पहले हमेशा डेटा से बचना होगा।

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

प्रलेखन:




घातक त्रुटि: ऑब्जेक्ट संदर्भ में नहीं होने पर $ का उपयोग करना

$this PHP में एक विशेष चर है जिसे असाइन नहीं किया जा सकता है। यदि इसे किसी संदर्भ में एक्सेस किया गया है जहां यह अस्तित्व में नहीं है, तो यह घातक त्रुटि दी गई है।

यह त्रुटि हो सकती है:

  1. यदि एक गैर स्थैतिक विधि स्थैतिक रूप से कहा जाता है। उदाहरण:

    class Foo {
       protected $var;
       public function __construct($var) {
           $this->var = $var;
       }
    
       public static function bar () {
           // ^^^^^^
           echo $this->var;
           //   ^^^^^
       }
    }
    
    Foo::bar();
    

    कैसे ठीक करें: अपने कोड की फिर से समीक्षा करें, $this केवल ऑब्जेक्ट संदर्भ में उपयोग किया जा सकता है, और किसी स्थिर विधि में कभी भी इसका उपयोग नहीं किया जाना चाहिए। साथ ही, एक स्थैतिक विधि को गैर स्थैतिक संपत्ति तक नहीं पहुंचना चाहिए। स्थैतिक संपत्ति तक पहुंचने के लिए self::$static_property का उपयोग करें।

  2. यदि किसी क्लास विधि से कोड को सामान्य फ़ंक्शन या केवल वैश्विक दायरे में कॉपी किया गया है और $this विशेष चर रखा गया है।
    कैसे ठीक करें : कोड की समीक्षा करें और $this एक अलग प्रतिस्थापन चर के साथ $this प्रतिस्थापित करें।

संबंधित सवाल:

  1. स्थैतिक के रूप में गैर स्थैतिक विधि को कॉल करें: PHP घातक त्रुटि: ऑब्जेक्ट संदर्भ में नहीं होने पर $ का उपयोग करना
  2. कोड पर कॉपी करें: घातक त्रुटि: ऑब्जेक्ट संदर्भ में नहीं होने पर $ का उपयोग करना
  3. सभी "ऑब्जेक्ट संदर्भ में नहीं होने पर $ का उपयोग करना" स्टैक ओवरफ्लो पर प्रश्न



Warning: mysql_connect(): Access denied for user 'name'@'host'

This warning shows up when you connect to a MySQL/MariaDB server with invalid or missing credentials (username/password). So this is typically not a code problem, but a server configuration issue.

  • See the manual page on mysql_connect("localhost", "user", "pw") for examples.

  • Check that you actually used a $username and $password .

    • It's uncommon that you gain access using no password - which is what happened when the Warning: said (using password: NO) .
    • Only the local test server usually allows to connect with username root , no password, and the test database name.

    • You can test if they're really correct using the command line client:
      mysql --user="username" --password="password" testdb

    • Username and password are case-sensitive and whitespace is not ignored. If your password contains meta characters like $ , escape them, or put the password in single quotes .

    • Most shared hosting providers predeclare mysql accounts in relation to the unix user account (sometimes just prefixes or extra numeric suffixes). See the docs for a pattern or documentation, and CPanel or whatever interface for setting a password.

    • See the MySQL manual on Adding user accounts using the command line. When connected as admin user you can issue a query like:
      CREATE USER 'username'@'localhost' IDENTIFIED BY 'newpassword';

    • Or use Adminer or WorkBench or any other graphical tool to create, check or correct account details.

    • If you can't fix your credentials, then asking the internet to "please help" will have no effect. Only you and your hosting provider have permissions and sufficient access to diagnose and fix things.

  • Verify that you could reach the database server, using the host name given by your provider:
    ping dbserver.hoster.example.net

    • Check this from a SSH console directly on your webserver. Testing from your local development client to your shared hosting server is rarely meaningful.

    • Often you just want the server name to be "localhost" , which normally utilizes a local named socket when available. Othertimes you can try "127.0.0.1" as fallback.

    • Should your MySQL/MariaDB server listen on a different port, then use "servername:3306" .

    • If that fails, then there's a perhaps a firewall issue. (Off-topic, not a programming question. No remote guess-helping possible.)

  • When using constants like eg DB_USER or DB_PASSWORD , check that they're actually defined .

    • If you get a "Warning: Access defined for 'DB_USER'@'host'" and a "Notice: use of undefined constant 'DB_PASS'" , then that's your problem.

    • Verify that your eg xy/db-config.php was actually included and whatelse.

  • Check for correctly set GRANT permissions .

    • It's not sufficient to have a username + password pair.

    • Each MySQL/MariaDB account can have an attached set of permissions.

    • Those can restrict which databases you are allowed to connect to, from which client/server the connection may originate from, and which queries are permitted.

    • The "Access denied" warning thus may as well show up for mysql_query calls, if you don't have permissions to SELECT from a specific table, or INSERT / UPDATE , and more commonly DELETE anything.

    • You can adapt account permissions when connected per command line client using the admin account with a query like:
      GRANT ALL ON yourdb.* TO 'username'@'localhost';

  • If the warning shows up first with Warning: mysql_query(): Access denied for user ''@'localhost' then you may have a php.ini-preconfigured account/password pair .

    • Check that mysql.default_user= and mysql.default_password= have meaningful values.

    • Oftentimes this is a provider-configuration. So contact their support for mismatches.

  • Find the documentation of your shared hosting provider:

  • Note that you may also have depleted the available connection pool . You'll get access denied warnings for too many concurrent connections. (You have to investigate the setup. That's an off-topic server configuration issue, not a programming question.)

  • Your libmysql client version may not be compatible with the database server. Normally MySQL and MariaDB servers can be reached with PHPs compiled in driver. If you have a custom setup, or an outdated PHP version, and a much newer database server, or significantly outdated one - then the version mismatch may prevent connections. (No, you have to investigate yourself. Nobody can guess your setup).

More references:

Btw, you probably don't want to use mysql_* functions anymore . Newcomers often migrate to mysqli , which however is just as tedious. Instead read up on PDO and prepared statements .
$db = new PDO("mysql:host=localhost;dbname=testdb", "username", "password");




नोटिस: अपरिभाषित सूचकांक

ऐसा होता है जब आप सरणी में मौजूद किसी कुंजी द्वारा किसी सरणी को एक्सेस करने का प्रयास करते हैं।

एक Undefined Index नोटिस के लिए एक सामान्य उदाहरण होगा ( demo )

$data = array('foo' => '42', 'bar');
echo $data['spinach'];
echo $data[1];

दोनों spinach और 1 सरणी में मौजूद नहीं हैं, जिससे E_WARNING ट्रिगर हो जाता है।

समाधान यह सुनिश्चित करना है कि इंडेक्स या ऑफसेट उस इंडेक्स तक पहुंचने से पहले मौजूद है। इसका मतलब यह हो सकता है कि आपको यह सुनिश्चित करने के लिए अपने प्रोग्राम में एक बग ठीक करने की आवश्यकता है कि जब आप उन्हें उम्मीद करते हैं तो वे इंडेक्स मौजूद होते हैं। या इसका मतलब यह हो सकता है कि आपको यह जांचने की आवश्यकता है कि इंडेक्स array_key_exists या array_key_exists का उपयोग कर मौजूद हैं या नहीं:

$data = array('foo' => '42', 'bar');
if (array_key_exists('spinach', $data)) {
    echo $data['spinach'];
}
else {
    echo 'No key spinach in array';
}

यदि आपके पास कोड है:

<?php echo $_POST['message']; ?>
<form method="post" action="">
    <input type="text" name="message">
    ...

तब $_POST['message'] सेट नहीं किया जाएगा जब यह पृष्ठ पहली बार लोड हो और आपको उपरोक्त त्रुटि मिल जाएगी। केवल जब फॉर्म सबमिट किया जाता है और यह कोड दूसरी बार चलाया जाता है तो सरणी अनुक्रमणिका मौजूद होगी। आप आमतौर पर इसके साथ जांचते हैं:

if ($_POST)  ..  // if the $_POST array is not empty
// or
if ($_SERVER['REQUEST_METHOD'] == 'POST') ..  // page was requested with POST

संबंधित सवाल:




Warning: Division by zero

The warning message 'Division by zero' is one of the most commonly asked questions among new PHP developers. This error will not cause an exception, therefore, some developers will occasionally suppress the warning by adding the error suppression operator @ before the expression. उदाहरण के लिए:

$value = @(2 / 0);

But, like with any warning, the best approach would be to track down the cause of the warning and resolve it. The cause of the warning is going to come from any instance where you attempt to divide by 0, a variable equal to 0, or a variable which has not been assigned (because NULL == 0) because the result will be 'undefined'.

To correct this warning, you should rewrite your expression to check that the value is not 0, if it is, do something else. If the value is zero you should not divide, or change the value to 1 and then divide so the division results in the equivalent of having divided only by the additional variable.

if ( $var1 == 0 ) { // check if var1 equals zero
    $var1 = 1; // var1 equaled zero so change var1 to equal one instead
    $var3 = ($var2 / $var1); // divide var1/var2 ie. 1/1
} else {
    $var3 = ($var2 / $var1); // if var1 does not equal zero, divide
}

Related Questions:




पार्स त्रुटि: वाक्यविन्यास त्रुटि, अप्रत्याशित T_XXX

ऐसा होता है जब आपके पास अप्रत्याशित स्थान पर T_XXX टोकन होता है, असंतुलित (अनावश्यक) कोष्ठक, php.ini में इसे सक्रिय किए बिना संक्षिप्त टैग का उपयोग, और बहुत कुछ।

संबंधित सवाल:

आगे की सहायता के लिए देखें:

  • http://phpcodechecker.com/ - जो आपके वाक्यविन्यास संकटों पर कुछ और उपयोगी स्पष्टीकरण प्रदान करता है।