2013-07-26 11 views
6

अभी मैं एक mysqli क्वेरी में एकाधिक मापदंडों बंधन से निपटने के लिए निम्नलिखित संरचना का उपयोग करने कर रहा हूँ:बाइंड से अधिक पैरामीटर

if ($words_total == 1) 
{ 
    $statement -> bind_param("s", $words[0]); 
} 
else if ($words_total == 2) 
{ 
    $statement -> bind_param("ss", $words[0], $words[1]); 
} 
else if ($words_total == 3) 
{ 
    $statement -> bind_param("sss", $words[0], $words[1], $words[2]); 
} 

//and so on.... 

मैं नीचे दिए गए कोड का उपयोग कर प्रश्न चिह्न की संख्या से काम करते हैं और अपनी क्वेरी में डालने:

$marks = ""; 
for($i = 1; $i<=$words_total; $i++) { 
    if ($i == $words_total) 
    { 
     $marks .= "?"; 
    } 
    else 
    { 
     $marks .= "?,"; 
    } 
} 

मेरा प्रश्न निश्चित रूप से है वहाँ के रूप में मैं गतिशील जरूरत क्वेरी में के रूप में कई आदानों से निपटने का एक तरीका होना चाहिए। Bind_param() हार्डकोडिंग() इसे संभालने का एक बहुत बुरा तरीका लगता है।

मैं php संस्करण 5.4.10

उत्तर

14

यहाँ समाधान या मूल्यों के परिवर्तनशील बंधन की वास्तविक समस्या का उपयोग कर रहा तैयार बयान mysqli करने के लिए हो जाता है:

<?php 
$values = array('b','c','d'); 

$in = str_repeat("?,", count($values)); 
$in = trim($in, ","); 

$sql = "SELECT * from users where username in($in)"; 
$stm = $con->prepare($sql); 

$types = str_repeat("s", count($values)); 

if (strnatcmp(phpversion(),'5.3') >= 0) 
{ 
    $bind = array(); 
    foreach($values as $key => $val) 
    { 
     $bind[$key] = &$values[$key]; 
    } 

} else { 

    $bind = $values; 
} 

array_unshift($bind, $types); 
call_user_func_array(array($stm, 'bind_param'), $bind); 

#var_dump($sql, $types, $bind, $con->error); 

$stm->execute(); 
$res = $stm->get_result(); 
while($row = $res->fetch_assoc()) var_dump($row); 

टिप्पणी की लाइन विकास परीक्षण के लिए है । अत्यंत उपयोगी।

लेकिन आपकी प्रारंभिक समस्या में त्रुटि रिपोर्टिंग की कमी थी।

यह आपको न केवल इस विशेष मामले में बल्कि PHP के साथ आपका पूरा अनुभव खराब कर दिया।
हर बार जब कुछ गलत हो जाता है, तो PHP आपको बताएगा - क्या हुआ और किसका दोष है। केवल अगर आप इसे देते हैं। और आपको हमेशा चाहिए।

आप इस answer on error reporting basics

पढ़ सकता है एक त्रुटि संदेश हो रही है, तो आप बस इसके लिए गूगल और सेकंड में एक समाधान पा सकते हैं। या कम से कम आप जान लेंगे, आपके पास क्या समस्या है। जो वास्तव में call_user_func_array() फ़ंक्शन का व्यवहार है, जो अचानक बदल गया था।

+0

इस के लिए बहुत बहुत धन्यवाद - मैं सचमुच इस समस्या के लिए अपने बदसूरत समाधान पर निराशा में था। मैं मानता हूं कि त्रुटि रिपोर्टिंग मेरी कमजोरी है कि मुझे और जानने के लिए समय बिताने की जरूरत है। मैंने केवल 2 महीने पहले php सीखा था, इसलिए अब तक यह सब संभव है जितना संभव हो सके करने में सक्षम होने के बारे में है। अब मुझे लगता है कि मुझे चीजों को और साथ ही संभव करने पर अधिक ध्यान देना होगा !! गले और धन्यवाद! –

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