usando una tabla registros paso pagina obtener mostrar listar insertar formulario extraer ejemplos desde datos crear con como php mysql arrays

una - obtener datos mysql php



Tengo una matriz de enteros, ¿cómo uso cada uno en una consulta mysql(en php)? (5)

Usando la cláusula "IN"

Puede ser lo que buscas

$ids = array(2,4,6,8); $ids = implode($ids); $sql="SELECT * FROM my_table WHERE id IN($ids);"; mysql_query($sql);

de lo contrario, ¿qué pasa con

$ids = array(2,4,6,8); foreach($ids as $id) { $sql="SELECT * FROM my_table WHERE ID = $id;"; mysql_query($sql); }

Tengo una matriz llena de identificadores de elementos de contenido aleatorio. Necesito ejecutar una consulta mysql (id en la matriz va en la cláusula WHERE), usando cada ID que está en la matriz, en el orden en que aparecen en dicha matriz. ¿Cómo haría esto?

Esta será una consulta de ACTUALIZACIÓN, para cada ID individual en la matriz.


Amén al comentario de Tomalak sobre las declaraciones.

Sin embargo, si no desea utilizar mysqli, siempre puede usar intval () para evitar la inyección:

$ids = array(2, 4, 6, 8); for ($i = 0; $i < count($ids); $i++) { mysql_query("UPDATE MyTable SET LastUpdated = GETDATE() WHERE id = " . intval($ids[$i])); }


Podría hacer algo como lo siguiente, sin embargo, debe tener MUCHO cuidado de que la matriz solo contenga enteros, de lo contrario podría terminar con inyección de SQL.

Realmente no desea hacer múltiples consultas para obtener el contenido si puede ayudarlo. Algo como esto podría ser lo que buscas.

foreach ($array as $key = $var) { if ((int) $var <= 0) { unset($array[$key]); } } $query = "SELECT * from content WHERE contentid IN (''".implode("'',''", $array)."'')"; $result = mysql_query($query);


$values_filtered = array_filter(''is_int'', $values); if (count($values_filtered) == count($values)) { $sql = ''update table set attrib = ''something'' where someid in ('' . implode('','', $values_filtered) . '');''; //execute } else { //do something }


Como con casi todas las preguntas "¿Cómo hago SQL desde PHP?" - Realmente debería usar declaraciones preparadas. No es tan dificil:

$ids = array(2, 4, 6, 8); // prepare an SQL statement with a single parameter placeholder $sql = "UPDATE MyTable SET LastUpdated = GETDATE() WHERE id = ?"; $stmt = $mysqli->prepare($sql); // bind a different value to the placeholder with each execution for ($i = 0; $i < count($ids); $i++) { $stmt->bind_param("i", $ids[$i]); $stmt->execute(); echo "Updated record ID: $id/n"; } // done $stmt->close();

Alternativamente, puedes hacerlo así:

$ids = array(2, 4, 6, 8); // prepare an SQL statement with multiple parameter placeholders $params = implode(",", array_fill(0, count($ids), "?")); $sql = "UPDATE MyTable SET LastUpdated = GETDATE() WHERE id IN ($params)"; $stmt = $mysqli->prepare($sql); // dynamic call of mysqli_stmt::bind_param hard-coded eqivalent $types = str_repeat("i", count($ids)); // "iiii" $args = array_merge(array($types), $ids); // ["iiii", 2, 4, 6, 8] call_user_func_array(array($stmt, ''bind_param''), ref($args)); // $stmt->bind_param("iiii", 2, 4, 6, 8) // execute the query for all input values in one step $stmt->execute(); // done $stmt->close(); echo "Updated record IDs: " . implode("," $ids) ."/n"; // ---------------------------------------------------------------------------------- // helper function to turn an array of values into an array of value references // necessary because mysqli_stmt::bind_param needs value refereces for no good reason function ref($arr) { $refs = array(); foreach ($arr as $key => $val) $refs[$key] = &$arr[$key]; return $refs; }

Agregue más marcadores de posición de parámetros para otros campos cuando los necesite.

¿Cuál escoger?

  • La primera variante funciona con un número variable de registros de forma iterativa, llegando a la base de datos varias veces. Esto es más útil para las operaciones UPDATE e INSERT.

  • La segunda variante también funciona con un número variable de registros, pero solo llega a la base de datos una vez. Esto es mucho más eficiente que el enfoque iterativo, obviamente, solo puede hacer lo mismo con todos los registros afectados. Esto es más útil para operaciones SELECCIONAR y ELIMINAR, o cuando desea ACTUALIZAR registros múltiples con la misma información.

¿Por qué declaraciones preparadas?

  • Las declaraciones preparadas son mucho más seguras porque hacen que los ataques de inyección SQL sean imposibles. Esta es la razón principal para usar declaraciones preparadas, incluso si es más trabajo escribirlas. Un hábito razonable para entrar es: siempre use declaraciones preparadas, incluso si piensa que "no es realmente necesario". La negligencia vendrá y morderá a usted (o a sus clientes).
  • Reutilizar la misma declaración preparada muchas veces con diferentes valores de parámetros es más eficiente que enviar múltiples cadenas de SQL completas a la base de datos, porque la base de datos solo necesita compilar la declaración una vez y también puede volver a usarla.
  • Solo los valores de los parámetros se envían a la base de datos en execute() , por lo que hay que pasar menos datos por el cable cuando se usan repetidamente.

En bucles más largos, la diferencia de tiempo de ejecución entre el uso de una instrucción preparada y el envío de SQL simple se volverá perceptible.