print pass pasar into cambiar asociativo array php implode

pass - print array to string php



Implode PHP pero envuelva cada elemento en citas (4)

Supongamos que tengo una matriz:

$elements = array(''foo'', ''bar'', ''tar'', ''dar'');

Entonces quiero construir una consulta DELETE IN SQL:

$SQL = "DELETE FROM elements WHERE id IN (''" . implode('','', $elements) . "'')";

El problema es que los identificadores en la matriz de elementos no se citan individualmente. IE la consulta se ve como:

$SQL = "DELETE FROM elements WHERE id IN (''foo,bar,tar,dar'');

¿Cuál es la mejor manera, la mayoría de los elegants para solucionar esto?


Agregue las comillas a la llamada implode : (Supongo que usted quiso decir implode )

$SQL = ''DELETE FROM elements WHERE id IN ("'' . implode(''", "'', $elements) . ''")'';

Esto produce:

DELETE FROM elements WHERE id IN ("foo", "bar", "tar", "dar")

La mejor manera de prevenir la inyección SQL es asegurarse de que sus elementos se escapen correctamente.

Una cosa fácil de hacer que debería funcionar (pero no lo he probado) es usar array_map o array_walk , y escapar de todos los parámetros, de esta forma:

$elements = array(); $elements = array_map( ''mysql_real_escape_string'', $elements);


Puede ejecutar una función simple array_map () para envolver las cadenas entre comillas y luego envolver eso alrededor del implode () para agregar las comas:

$array = ["one", "two", "three", "four"]; implode(",", array_map(function($string) { return ''"'' . $string . ''"''; }, $array));


Puede usar array_walk para iterar todos los elementos del lado de la matriz que pasa la referencia al elemento y agregar las comillas de la siguiente manera.

<?php $arr = [''a'',''b'',''c'']; array_walk($arr, function(&$x) {$x = "''$x''";}); echo implode('','', $arr); // ''a'',''b'',''c'' ?>


Solo para agregar un poco a la respuesta principal aquí, incluso si está usando MySQLi, es posible llamar a real_escape_string usando array_map usando el formulario de objeto que se puede llamar. Aquí hay un ejemplo, asumiendo que $conn es su conexión MySQLi:

$elements = array(''foo'', ''bar'', ''tar'', ''dar''); $cleanedElements = array_map([$conn, ''real_escape_string''], $ids); $SQL = ''DELETE FROM elements WHERE id IN ("'' . implode(''", "'', $elements) . ''")'';

Tenga en cuenta que el primer parámetro de array_map es una matriz con el objeto seguido del nombre del método. Esto es lo mismo que ejecutar lo siguiente para cada elemento de la matriz:

$newItem = $conn->real_escape_string($item);