2012-08-27 19 views
22

में गिर रहा था मुझे लगता है कि जैसे एक पाश था:पीएचपी पीडीओ bindParam एक foreach

foreach($Fields as $Name => $Value){ 
    $Query->bindParam(':'.$Name, $Value, PDO::PARAM_STR); 
} 

कुछ भी नहीं जटिल। हालांकि, प्रत्येक मान सरणी में पिछले एक पर सेट किया गया था ($Fields)।

मैं इसे कैसे ठीक कर सकता हूं?

उत्तर

39

हालांकि, इस guys के लिए धन्यवाद। मुझे पता चला है कि आप इस तरह से पहले एक & साथ संदर्भ द्वारा मूल्य पारित करने के लिए की जरूरत है:

foreach($Fields as $Name => &$Value){ 
    $Query->bindParam(':'.$Name, $Value, PDO::PARAM_STR); 
} 

यह मैं पागल गाड़ी चला रहा था।

PHP.net से

वास्तविक बोली:

विली 28-मई -2010 12:01

यह काम करता है (संदर्भ द्वारा $ वैल):

<?php 
foreach ($params as $key => &$val){ 
    $sth->bindParam($key, $val); 
} 
?> 

हो जाएगा ताकि असफल (मूल्य से $ वैल, क्योंकि बाइंडपैम को & $ चर की आवश्यकता है):

<?php 
foreach ($params as $key => $val) { 
    $sth->bindParam($key, $val); 
} 
?> 
+5

मेरी जान बचाई। इसे खोजने के लिए धन्यवाद। –

+0

@XyanEwing आपका स्वागत है! –

+2

लगभग मेरे मॉनिटर में अपने कीबोर्ड को थप्पड़ मार दिया, इसे बचाने के लिए thx! :) –

6

आप चर से पहले क्वेरी निष्पादित किया जाता है बाध्य पैरामीटर के साथ सिंक में रखने के लिए (इस स्थिति समय की 99.9% है, मेरे अनुभव में) की क्षमता की जरूरत नहीं है, यह शायद बेहतर है के बजाय PDOStatement::bindValue() का उपयोग करने के लिए:

foreach ($Fields as $Name => $Value) { 
    $Query->bindValue(':' . $Name, $Value, PDO::PARAM_STR); 
} 
+0

जानकारी के लिए धन्यवाद, लेकिन मुझे इसके बारे में पता था। यही कारण है कि मैं बिंदपाराम का उपयोग कर रहा था, लिपि में कुछ बदलाव चल रहा है। और मैं bindValue का उपयोग कर रहा हूं अक्सर यह जानना कि बिंदप्रम को एक और की आवश्यकता थी। –

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