transponer por operaciones multiplicar mmult matriz matrices manejo escribir con como calcular php arrays

php - por - Una manera fácil de aplicar una función a una matriz



multiplicar matriz por vector excel (6)

Esto se debe a que a mysql_real_escape_string se le están asignando dos parámetros, ambas cadenas.

http://php.net/manual/en/function.mysql-real-escape-string.php

http://www.phpbuilder.com/manual/en/function.array-map.php :

array_map () devuelve una matriz que contiene todos los elementos de arr1 después de aplicar la función de devolución de llamada a cada uno. El número de parámetros que acepta la función de devolución de llamada debe coincidir con el número de matrices pasadas a array_map ()

Podrías hacerlo

function myescape($val) { return mysql_real_escape_string($val); }

... entonces

array_walk($_POST, ''myescape'');

Soy consciente de array_walk() y array_map() . Sin embargo, al usar el anterior como tal (en un proyecto anterior), falló

array_walk($_POST, ''mysql_real_escape_string'');

Advertencia: mysql_real_escape_string () espera que el parámetro 2 sea un recurso, una cadena dada.

Así que fui con esta versión un poco más fea.

foreach($_POST as $key => $value) { $_POST[$key] = mysql_real_escape_string($value); }

Entonces, ¿por qué no funcionó la primera manera? ¿Cuál es la mejor manera de asignar los valores de una matriz a una función?


Sé que el OP solicitó llamar a una función, sin embargo, en los casos en los que realmente no necesita llamar a una función, puede definir una anónima :

$ids = [1,2,3]; array_walk($ids,function(&$id){$id += 1000;});


Se espera que la función de devolución de llamada pasada a array_walk acepte dos parámetros, uno para el valor y otro para la clave:

Normalmente, funcname toma dos parámetros. El valor del parámetro de matriz es el primero, y la clave / índice segundo.

Pero mysql_real_escape_string espera que el segundo parámetro sea un recurso. Es por eso que estás recibiendo ese error.

Utilice array_map en array_map lugar, solo toma el valor de cada elemento y lo pasa a la función de devolución de llamada dada:

array_map(''mysql_real_escape_string'', $_POST);

El segundo parámetro se omitirá y, por lo tanto, se utilizará la última conexión abierta.

Si necesita pasar el segundo parámetro, debe ajustar la llamada a la función en otra función, por ejemplo, una función anónima :

array_map(function($string) use ($link) { return mysql_real_escape_string($string, $link); }, $_POST);


Tuve problemas para usar la respuesta aceptada, ya que me causó errores por razones que no pude resolver. Así que para cualquier persona que tenga problemas con array_walk o array_map, encontré que esto funciona.

foreach($_POST as $pk => $pv) $_POST[$pk] = mysql_real_escape_string($pv);


http://php.net/manual/en/function.array-walk.php dice que array_walk llamará a la función con 2 argumentos, el valor y la clave. Debería escribir una nueva función para envolver mysql_real_escape_string. Algo como:

function wrapper($val, $key){ return mysql_real_escape_string($val); }

Y entonces:

array_walk($_POST, ''wrapper'');

Lo siento si mi PHP no es correcto, pero creo que captarás la idea general.


mysql_real_escape_string() no funcionará a menos que primero haya realizado una conexión mysql. La razón por la que es tan genial es que escapará de los caracteres de una manera que se ajuste al tipo de tabla. El segundo argumento [opcional] es una referencia a la conexión mysql.

$_POST siempre se configura como key->value . Por lo tanto, array_walk llama mysql_real_escape_string(value, key) . Note que el segundo argumento no es una referencia.

Por eso no funciona. Hay varias soluciones ya mencionadas anteriormente.