2011-11-28 15 views
7

मैं तैयार बयान लिखने के लिए एक ही चर $stmt मेरे PHP स्क्रिप्ट में पुन: उपयोग किया गया है:मुझे कैसे पता चलेगा कि एक तैयार वक्तव्य कैश किया जा रहा है या नहीं?

$stmt = $dbh->prepare("SELECT column_A FROM Table1 WHERE id=?"); 
$stmt->bindValue(1, $id, PDO::PARAM_INT); 
$stmt->execute(); 
.... 

$stmt = $dbh->prepare("UPDATE Table2 SET column_B=? WHERE column_A=?"); 
$stmt->bindValue(1, $name); 
$stmt->bindValue(2, $column_A); 
$stmt->execute(); 

मेरा प्रश्न है, मैं कैसे पता चलेगा कि दो बयानों को कैश और करने के लिए लिखा जा रहा है कि दूसरे बयान नहीं किया पहले कथन को ओवरराइट करें हालांकि दोनों कथन समान वैरिएबल नाम साझा कर रहे हैं?

+0

+1 मुझे कुछ नया –

उत्तर

2

वक्तव्य डेटाबेस इंजन और PHP नहीं द्वारा तैयार किया जाता है, देखें:

तो PHP में एक ही चर नाम पुन: उपयोग को अमान्य MySQL "कैश" तैयार नहीं होंगे।

+1

पढ़ाने के लिए +1 क्या यह केवल तभी लागू होता है जब 'सेट एट्रिब्यूट (पीडीओ :: ATTR_EMULATE_PREPARES, false)' या यह सत्य और झूठे दोनों मामलों के लिए लागू है? –

+0

यह लिंक में कहा गया है कि "यदि दिए गए नाम के साथ एक तैयार कथन पहले से मौजूद है, तो नए कथन तैयार होने से पहले इसे पूरी तरह से हटा दिया गया है।" मुझे कैसे पता चलेगा कि 'stmt_name' को MySQL द्वारा असाइन किया गया है और PHP चर नाम से नहीं लिया गया है? –

+0

@ बेनहुह: ईमानदारी से, मुझे नहीं पता। मेरा अनुमान है कि 'stmt_name' एसएचएल क्वेरी से PHP द्वारा गणना की गई हैश की कुछ प्रकार है। मैंने MySQL दस्तावेज़ों और पीडीओ/mysql स्रोत कोड पर एक त्वरित नज़र डाली और किसी भी दिशा में इंगित करने वाली कुछ भी नहीं मिली लेकिन मुझे लगता है कि MySQL लॉग कुछ प्रकार की उपयोगी जानकारी प्रदान कर सकता है। –

0

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

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