Ver Mensaje Individual
  #11 (permalink)  
Antiguo 23/01/2016, 08:13
jonyjdv
 
Fecha de Ingreso: julio-2014
Mensajes: 115
Antigüedad: 10 años, 7 meses
Puntos: 1
Respuesta: real_escape_string Problema

Cita:
Iniciado por x_atrix Ver Mensaje
Cosa fuera de tema pero igual te viene bien. Viendo el codigo, solo vas a tener 1, 2, 3, 4, 8, 10 o 14 parametros ... no puedes tener 7 ni 22 :) ok ok ...

Igual te vendría bien saber que en php 5.6.x puedes usar "..." para indicar que el parametro se puede repetir las veces que haga falta y de la misma forma puedes pasar esto datos al siguiente metodo.

Ejemplos:
Código PHP:
function suma(...$numeros) {
    
$resultado 0;
    foreach (
$numeros as $numero) {
        
$resultado += $numero;
    }

    return 
$resultado;
}

// Llamadas a la funcion suma
suma(23); // Devuelve 5
suma(23456// Devuelve 20 
Pero puedes usar este array (en el ejemplo $numeros) para pasarlo a bind_param.

Ejemplo:
Código PHP:
// Bueno, quitando el escape ... no tiene sentido aqui
 
$stmt->bind_param(...$escapar_datos); // Le pasa todos, ya sean 7, 22, 1, 4, 8, 10 o 14 como lo tienes definido 
El tipo "$type" sabes como sacarlo usando el mismo bucle que estabas utilizando.

Con esto eliminas todo el codigo de ifs / else ifs con lineas de 14 parametros.
Y quedaria muchisimo mas limpio asi:
Código PHP:
function eliminar_nuevos_datos($conexion$consulta$id_insert, ...$escapar_datos) {

    
// Create connection
    
require($_SERVER['DOCUMENT_ROOT'] . $conexion);

    
$SQL_datos_conexion = new mysqli($db_host$db_user$db_pass$db_name);

    
//Si se quiere escapar los datos
    
if ($escapar_datos != false) {
        
        
$stmt $SQL_datos_conexion->prepare($consulta);

        
// Saber si es string o numerico(int)
        
$type '';
        foreach (
$escapar_datos as $value) {
            
$type .= is_numeric($value) ? 'i' 's';
        }

        
$stmt->bind_param($type, ...$escapar_datos);
        
$stmt->execute();

        if (
$id_insert == true) {
            
//Retornar numero de celdas afectadas e ID del registro
            
$n_celdas $stmt->affected_rows;
            
$id_registro $stmt->insert_id;

            return array(
$n_celdas$id_registro);
        } else {
            
//Retornar numero de celdas afectadas
            
return $stmt->affected_rows;
        }

        
$stmt->close();

    } else {
        
mysqli_query($SQL_datos_conexion$consulta);
    }

    
mysqli_close($SQL_datos_conexion);

Gracias por tu aportacion ya iba a dar este tema por solucionado voy a probarlo :)

[EDITO]
Si funciono a las mil maravillas, muchisimas gracias me traia de cabeza esa cuestion por el tema del rendimiento y volumen de codigo. Ya me dijo pateketrueke que bind_param ya escapa los caracteres especiales por eso edite el codigo y esas variables.

Saludos amigo

PD: puedo usarlo con bind_result ??

Última edición por jonyjdv; 23/01/2016 a las 09:15