Enlazar múltiples parámetros en la consulta mysqli

En este momento, tengo que usar la siguiente estructura para hacer frente a la vinculación de múltiples parámetros en una consulta 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.... 

Resuelvo el número de signos de interrogación usando el siguiente código e inserto en mi consulta:

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

Mi pregunta es, seguramente, que debe haber una forma de manejar tantas entradas en la consulta como necesite dinámicamente. La encoding de bind_param () parece una forma realmente mala de manejar esto.

Estoy usando php versión 5.4.10

Aquí va la solución o el problema real de vincular un número variable de valores a la statement preparada de mysqli:

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

La línea comentada es solo para pruebas de desarrollo. Extremadamente útil.

Pero su problema inicial fue la falta de informes de errores.

Te echó a perder no solo en este caso en particular, sino en toda tu experiencia con PHP.
Cada vez que algo sale mal, PHP te dirá: qué sucedió y a quién culpar. Solo si lo dejas. Y siempre deberías.

Puede leer esta respuesta sobre los principios básicos de informes de errores

Mientras tiene un mensaje de error, puede buscarlo y encontrar una solución en segundos. O al menos sabrá, qué cierto problema tiene. Que es realmente el comportamiento de la función call_user_func_array() , que se cambió de repente.

    Intereting Posts