2011-02-25 22 views
25

पर किसी सदस्य फ़ंक्शन fetch_assoc() पर कॉल करें, मैं कुछ छवियों के बारे में जानकारी प्राप्त करने के लिए कुछ प्रश्न निष्पादित करने का प्रयास कर रहा हूं। मैंने एक फ़ंक्शनघातक त्रुटि: एक गैर-ऑब्जेक्ट

function get_recent_highs($view_deleted_images=false) 
{ 
    $lower = $this->database->conn->real_escape_string($this->page_size * ($this->page_number - 1)); 
    $query = "SELECT image_id, date_uploaded FROM `images` ORDER BY ((SELECT SUM(image_id=`images`.image_id) FROM `image_votes` AS score)/(SELECT DATEDIFF(NOW() , date_uploaded) AS diff)) DESC LIMIT " . $this->page_size . " OFFSET $lower"; //move to database class 
    $result = $this->database->query($query); 
    $page = array(); 
    while($row = $result->fetch_assoc()) 
    { 
     try 
     { 
      array_push($page, new Image($row['image_id'], $view_deleted_images)); 
     } 
     catch(ImageNotFoundException $e) 
     { 
      throw $e; 
     } 
    } 
    return $page; 
} 

जो इन लोकप्रियताओं के आधार पर इन छवियों का एक पृष्ठ चुनता है। मैंने Database कक्षा लिखी है जो डेटाबेस के साथ इंटरैक्शन और Image कक्षा को एक छवि के बारे में जानकारी रखती है। जब मैं इसे चलाने का प्रयास करता हूं तो मुझे एक त्रुटि मिलती है।

Fatal error: Call to a member function fetch_assoc() on a non-object 

$result एक mysqli resultset है, इसलिए मैं यह क्यों काम नहीं कर रहा है के रूप में चकित हूँ।

+0

var_dump $ परिणाम पर पुष्टि करता है कि यह एक mysqli परिणाम सेट है? – erisco

उत्तर

34

ऐसा इसलिए है क्योंकि आपकी क्वेरी में कोई त्रुटि हुई थी। MySQli->query() त्रुटि पर झूठी वापसी करेगा। ऐसा लगता है जैसे ::

$result = $this->database->query($query); 
if (!$result) { 
    throw new Exception("Database Error [{$this->database->errno}] {$this->database->error}"); 
} 

कुछ उसमें कोई त्रुटि है, तो वह एक अपवाद फेंक चाहिए में बदलें ...

+2

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

10

अधिकतर आपकी क्वेरी विफल हो गई है, और क्वेरी कॉल ने एक बुलियन FALSE (या किसी प्रकार की त्रुटि ऑब्जेक्ट) लौटा दी है, जिसे आप तब उपयोग करने का प्रयास करते हैं जैसे परिणामस्वरूप ऑब्जेक्ट था, जिससे त्रुटि उत्पन्न हुई। आपको वास्तव में क्या मिला है यह देखने के लिए var_dump($result) जैसी कुछ कोशिश करें।

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

3

मैं अपने प्रश्न में रिक्त स्थान को याद होती हैं और इस त्रुटि आता है।

Ex: $sql= "SELECT * FROM"; 
$sql .= "table1"; 

हालांकि जटिल प्रश्नों को कोड करते समय उदाहरण सरल दिख सकता है, इस त्रुटि की संभावना अधिक है। मैं शब्द "टेबल 1" से पहले अंतरिक्ष खो रहा था।

0

कृपया जांचें कि क्या आप पहले से ही डेटाबेस कनेक्शन बंद कर चुके हैं या नहीं। मेरे मामले में मुझे त्रुटि मिल रही थी क्योंकि कनेक्शन ऊपरी रेखा में बंद था।

+1

कृपया जांचें कि सात (!) वर्ष पुराने प्रश्न के लिए पहले से ही एक स्वीकृत उत्तर है जो आपको वही चीज़ बताएगा –

संबंधित मुद्दे