utf8 sentencias preparadas preparada mysqli_query mysql_set_charset ejemplo consultas consulta con mysqli sqlbindparameter

sentencias - Enlazar múltiples parámetros en la consulta mysqli



sentencias preparadas php mysqli (1)

Aquí va la solución o el problema real de vincular un número variable de valores a la declaración preparada de 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);

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.

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 codificación de bind_param () parece una forma realmente mala de manejar esto.

Estoy usando php versión 5.4.10