2015-11-02 7 views
6

मेरे पास एक साइट है जो PHP 5.6 चला रही है। साइट के लिए डेटाबेस को हाल ही में MySQL 5.1 से मारियाडीबी 10.0 (MySQL 5.5 संगत) में अपग्रेड किया गया था और अब मेरी साइट पर एक क्वेरी काम नहीं करेगी (और यह MySQL 5.1 डेटाबेस से कनेक्ट करते समय त्रुटि के बिना काम कर रहा था।PHP MySQL दृश्य का परिणाम 0 परिणाम देता है जब परिणाम होना चाहिए

यह डेमो, मेरे पास फ़ील्ड "आईडी" (पूर्णांक), और "पेज_टाइटल" (var_char) के साथ "सामग्री" नामक एक डेटाबेस तालिका है। उस तालिका में दो पंक्तियां हैं - एक 1 की आईडी और "टेस्ट 1" के पृष्ठ_शीर्षक के साथ, और दूसरी पंक्ति 2 का आईडी है और सेट PAGE_TITLE पर "टेस्ट 2"

मैं तो निम्न क्वेरी phpMyAdmin के अंदर का उपयोग कर इस तालिका के एक दृश्य बनाया:।

select `content`.`id` AS `id`,`content`.`page_title` AS `page_title` from `content` 

मैं phpMyAdmin में दृश्य तालिका में दृश्य तालिका से दृश्य और दोनों पंक्तियां देख सकता हूं।

मेरे PHP पृष्ठ पर, मेरे पास ऑब्जेक्ट उन्मुख शैली क्वेरी है। यही कारण है कि कोड है:

<?php 
try { 
require_once 'Connections/dbconn.php'; 
$sql = "SELECT id, page_title FROM v_content WHERE id = 1 LIMIT 1"; 
$stmt = $db->stmt_init(); 
if (!$stmt->prepare($sql)) { 
    $error = $stmt->error; 
} else { 
    $stmt->bind_result($id, $page_title); 
    $stmt->execute(); 
    $stmt->store_result(); 
    $stmt->fetch(); 
} 
} catch (Exception $e) { 
$error = $e->getMessage(); 
}?> 

इस क्वेरी निम्नलिखित लौटा रहा है: प्रयास करते समय कोई परिणाम तो मैं बस करने के लिए देखें "v_content" से तालिका बदलने बयान

के साथ जुड़े सेट है एक पंक्ति को पढ़ने के लिए तालिका "सामग्री", मुझे परिणाम मिल गया है। इसके अतिरिक्त, यदि मैं एक ही क्वेरी का उपयोग करता हूं (VIEW v_content से पूछताछ), और एक MySQL 5.1 डेटाबेस से कनेक्ट करें, तो मुझे परिणाम लौटा दिए जाते हैं। मुझे पता है कि क्वेरी के साथ कुछ भी गलत नहीं है, क्योंकि मैंने क्वेरी को कॉपी किया है और phpMyAdmin में चिपकाया है और परिणाम लौटा चुके हैं, और सटीक उसी कोड का उपयोग MySQL 5.1 डेटाबेस पर किया गया था और परिणाम लौटाए गए थे। मैंने त्रुटि लॉग की जांच की है और कोई त्रुटि दिखाई नहीं दे रही है।

किसी को भी कोई विचार है कि मुझे दृश्य से 0 परिणाम वापस आने के कारण क्या हो सकता है?

+0

"एक पंक्ति पढ़ने का प्रयास ..." त्रुटि एक चयन कथन के साथ नहीं होनी चाहिए। आमतौर पर इसका तात्पर्य है कि आपने 'अद्यतन' या 'INSERT' कथन (या आपने परिणाम सेट को पहले ही बंद कर दिया है) पर 'fetch()' करने का प्रयास किया है। 'Store_result() 'का उपयोग मुझे यहां पर संदेह करता है। चूंकि आप '$ stmt-> fetch()' को कॉल कर रहे हैं और 'bind_result()' का उपयोग किया है, मुझे विश्वास नहीं है कि आपको 'store_result()' की आवश्यकता है, खासकर जब से आप अपने रिटर्न परिणाम संसाधन को एक चर में संग्रहीत नहीं कर रहे हैं। उस रेखा को हटाएं और देखें कि आपकी स्थिति बदलती है या नहीं। –

+0

अगर मैं हटाता हूं - $ stmt-> store_result(); - कुछ नहीं बदलता है। यह अभी भी 0 परिणाम देता है। – user2762748

+0

लेकिन क्या यह अभी भी एक ही त्रुटि की रिपोर्ट करता है? ऐसा पोस्ट कोड के साथ असंभव लगता है। –

उत्तर

1

ऐसा लगता है कि सब के बाद, वहाँ साइट के वास्तविक कोडिंग के साथ मेरी अंत पर कोई समस्या नहीं थी। होस्टिंग कंपनी ने मुझे निम्नलिखित स्पष्टीकरण दिया:

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

0

मुझे लगता है कि आपको केवल निष्पादन और बाध्य स्थानों को स्विच करने की आवश्यकता है।

... 
} else { 
    $stmt->execute(); 
    $stmt->bind_result($id, $page_title); 
    $stmt->store_result(); 
    $stmt->fetch(); 
} 
... 
+0

यह कोशिश की गई थी, लेकिन दुर्भाग्य से परिणाम एक ही हैं। – user2762748

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