2013-02-01 8 views
6

मैं mysqli में नया हूं और मूल बातें सीखने की कोशिश करना शुरू कर दिया। इसके संबंध में मैं उदाहरण (http://php.net/manual/en/mysqli-result.fetch-array.php) मैं fetch_array कोशिश कर रहा था। मेरा कोड यहाँ है।mysqli - fetch_Array त्रुटि सदस्य किसी सदस्य फ़ंक्शन fetch_array() को गैर-ऑब्जेक्ट पर mysqli

$sqlGetChartData = "SELECT date, ratepersqft, location 
          FROM ratepersqft 
         WHERE project_id = 1"; 
$runGetChartData = $mysqli->query($sqlGetChartData); 

while($rowGetChartData = $runGetChartData->fetch_array(MYSQLI_BOTH)) 
    $arrGetChartData[] = $rowGetChartData; 

    print "<pre>"; 
    print_r($arrGetChartData); 
    exit(); 

यहाँ मैं जबकि हालत लाइन के बगल में इस त्रुटि एक सदस्य समारोह fetch_array() लाइन पर एक गैर-वस्तु पर करने के लिए कॉल हो रही है। मैंने इसे गुगल करने की कोशिश की और मेरी समस्या का नतीजा नहीं मिला। आशा है कि मेरा प्रश्न स्पष्ट है। अग्रिम में धन्यवाद।

उत्तर

16

क्वेरी चलाने पर हमेशा त्रुटियों की जांच करें।
और कृपया,

$arrChartData[] = array(); 
$sql = "SELECT date, ratepersqft, location FROM ratepersqft WHERE project_id = 1"; 
$res = $mysqli->query($sql) or trigger_error($mysqli->error."[$sql]"); 
while($row = $res->fetch_assoc()) { 
    $arrChartData[] = $row; 
} 

देखो अनावश्यक रूप से लंबे समय तक चर के साथ अपने कोड खिंचाव नहीं है, पहले चर अपने कार्यक्रम में कोई विशेष अर्थ के साथ सिर्फ एसक्यूएल कोड होता है, और यह बहुत अगली पंक्ति पर निपटारा किया जाएगा।
दूसरे चर में mysqli परिणाम शामिल है। फिर से कोई विशेष अर्थ नहीं है। पारंपरिक नाम का उपयोग करना ठीक है।
अस्थायी $row चर के लिए चला जाता है।
एकमात्र चर जो आपके कोड में विशेष अर्थ है $arrChartData[] - तो, ​​इसे सार्थक नाम दें। यद्यपि भरने से पहले आपको इसे आरंभ करना होगा।

और trigger_error भाग नोट करें जो mysqli त्रुटि को PHP त्रुटि में परिवर्तित करेगा। सभी mysql त्रुटियों के बारे में अधिसूचित होने के लिए हमेशा अपने प्रश्नों को चलाएं

वैसे, सभी अस्थायी चर से छुटकारा पाने के लिए, यह कुछ प्रकार के सहायक कार्य में स्थानांतरित करके, अपने एप्लिकेशन कोड को सरल बनाने के लिए अच्छा अभ्यास है निम्न 2 लाइनों

$sql = "SELECT date, ratepersqft, location FROM ratepersqft WHERE project_id = 1"; 
$arrChartData[] = dbGetAll($sql); 

यह आपके कोड को छोटा और अधिक पठनीय बना देगा।

+0

धन्यवाद। यह आपके सुझावों के संबंध में सुधार करने के बाद काम करता है। –

+4

यह समझाने का यह एक अच्छा तरीका था, +1। –

7

क्वेरी शायद विफल रही और mysqli::query FALSE लौटा। इसलिए $runGetChartDatamysqli_result ऑब्जेक्ट नहीं है, लेकिन boolean है, यही कारण है कि आपको अपनी त्रुटि मिल रही है।

the documentation से

:

रिटर्न विफलता पर गलत। सफल चयन के लिए, दिखाएं, डिस्क्रिब या एक्सप्लिन क्वेरी mysqli_query() एक mysqli_result ऑब्जेक्ट वापस कर देगा। अन्य सफल प्रश्नों के लिए mysqli_query() सत्य लौटाएगा।

+0

कोई भी अपने डाउनवोट को समझाना चाहता है? –

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