2013-07-26 17 views
6

In questo momento sto dover utilizzare la seguente struttura per far fronte con il legame più parametri in una query mysqli:Bind più parametri in query di 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.... 

io lavoro fuori il numero di punti interrogativi usando il codice seguente e inserirla nella mia domanda:

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

la mia domanda è sicuramente ci deve essere un modo di gestire il maggior numero di ingressi nella query come ho bisogno in modo dinamico. Hardcoding il bind_param() sembra un modo davvero pessimo di gestirlo.

Sto usando PHP versione 5.4.10

risposta

14

Qui va la soluzione o il problema reale di associazione di un numero variabile di valori per MySQLi dichiarazione preparata:

<?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); 

linea Commentate è solo per test di sviluppo . Estremamente utile.

Ma il tuo problema iniziale era la mancanza di segnalazione degli errori.

Ti ha rovinato non solo in questo caso particolare ma tutta la tua esperienza con PHP.
Ogni volta che qualcosa va storto, PHP ti dirà cosa è successo e chi è la colpa. Solo se lo lasci fare. E tu dovresti sempre.

si può leggere questo answer on error reporting basics

Pur avendo un messaggio di errore, si può semplicemente google per esso e trovare una soluzione in pochi secondi. O almeno saprai, quale problema hai. Quale è in realtà il comportamento della funzione call_user_func_array(), che è stata improvvisamente modificata.

+0

Grazie mille per questo - ero letteralmente disperata per la mia brutta soluzione a questo problema. Sono d'accordo che la segnalazione degli errori è una mia debolezza che ho bisogno di passare il tempo per saperne di più. Ho solo imparato php come 2 mesi fa, quindi fino ad ora si trattava di essere in grado di fare il più possibile. Ora penso che dovrei forse concentrarmi maggiormente sul fare le cose nel miglior modo possibile !! Abbracci e grazie! –

Problemi correlati