Ver Mensaje Individual
  #1 (permalink)  
Antiguo 23/01/2016, 08:20
jonyjdv
 
Fecha de Ingreso: julio-2014
Mensajes: 115
Antigüedad: 10 años, 7 meses
Puntos: 1
Problema con SELECT IN y BIND_PARAM

Hola a todos podrian decirme como puedo hacer funcionar este codigo

Código PHP:
    function datos($conexion$consulta$datos$informacion$contar_registros$mostrar_datos$mostrar_datos_numero){

        
// Create connection
        
require($_SERVER['DOCUMENT_ROOT'].$conexion);        
        
$SQL_datos_conexion = new mysqli($db_host$db_user$db_pass$db_name);

        
$stmt $SQL_datos_conexion->prepare($consulta);

            
$numero_datos count($datos);

                if(
$numero_datos>=2){

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

                    if(
$numero_datos==2){
                        
$stmt->bind_param($type$datos[0], $datos[1]);
                    }elseif(
$numero_datos==3){
                        
$stmt->bind_param($type$datos[0], $datos[1], $datos[2]);
                    }elseif(
$numero_datos==6){
                        
$stmt->bind_param($type$datos[0], $datos[1], $datos[2], $datos[3], $datos[4], $datos[5]);
                    }elseif(
$numero_datos==8){
                        
$stmt->bind_param($type$datos[0], $datos[1], $datos[2], $datos[3], $datos[4], $datos[5], $datos[6], $datos[7]);
                    }elseif(
$numero_datos==10){
                        
$stmt->bind_param($type$datos[0], $datos[1], $datos[2], $datos[3], $datos[4], $datos[5], $datos[6], $datos[7], $datos[8], $datos[9]);
                    }elseif(
$numero_datos==12){
                        
$stmt->bind_param($type$datos[0], $datos[1], $datos[2], $datos[3], $datos[4], $datos[5], $datos[6], $datos[7], $datos[8], $datos[9], $datos[10], $datos[11]);
                    }elseif(
$numero_datos==13){
                        
$stmt->bind_param($type$datos[0], $datos[1], $datos[2], $datos[3], $datos[4], $datos[5], $datos[6], $datos[7], $datos[8], $datos[9], $datos[10], $datos[11], $datos[12]);
                    }elseif(
$numero_datos==14){
                        
$stmt->bind_param($type$datos[0], $datos[1], $datos[2], $datos[3], $datos[4], $datos[5], $datos[6], $datos[7], $datos[8], $datos[9], $datos[10], $datos[11], $datos[12], $datos[13]);
                    }

                }elseif(
$numero_datos==1){
                    
$stmt->bind_param('s'$datos);
                }
                
            
$stmt->execute();

            
//Array para retornar informacion
            
$valores_retorno=array();

                
//Numero de celdas afectadas e ID del registro en caso de que sea un insert into el numero de celdas afectadas tambien funciona en el update
                
if($informacion==true){                
                    
$n_celdas=$stmt->affected_rows;
                    
$id_nuevo_registro=$stmt->insert_id;
                    
array_push($valores_retorno$n_celdas$id_nuevo_registro);
                }
                
//Contar registros, funciona en select
                
if($contar_registros==true){
                    
$stmt->store_result();
                    
$numero_registros=$stmt->num_rows;
                    
array_push($valores_retorno$numero_registros);
                }
                
//Mostrar los datos modificados (update)
                
if($mostrar_datos==true){
                    
//$stmt->store_result();
                    //$num_of_rows = $stmt->num_rows;

                    
if($mostrar_datos_numero==1){
                        
$stmt->bind_result($mostrar_info);
                    }elseif(
$mostrar_datos_numero==2){
                        
$stmt->bind_result($mostrar_info[0], $mostrar_info[1]);
                    }elseif(
$mostrar_datos_numero==5){
                        
$stmt->bind_result($mostrar_info[0], $mostrar_info[1], $mostrar_info[2], $mostrar_info[3], $mostrar_info[4]);
                    }elseif(
$mostrar_datos_numero==7){
                        
$stmt->bind_result($mostrar_info[0], $mostrar_info[1], $mostrar_info[2], $mostrar_info[3], $mostrar_info[4], $mostrar_info[5], $mostrar_info[6]);
                    }

                        while (
$stmt->fetch()) {
                            if(!
is_array($mostrar_info)){
                                
array_push($valores_retorno$mostrar_info);
                            }else{                        
                                for (
$i=0$i<$mostrar_datos_numero$i++) { 
                                    
array_push($valores_retorno$mostrar_info[$i]);
                                }
                            }
                        }

                    
$stmt->free_result();
                }

        
//Si no hay valoresa retornar eliminar la variable
        
if(empty($valores_retorno)){
            unset(
$valores_retorno);
        }else{
            return 
$valores_retorno;
        }

        
$stmt->close();
        
$SQL_datos_conexion->close();

    } 
En consulta iria un codigo tipo select in pero solo coje el primer parametro, por ejemplo si quiero que me muestre varias ciudades en las que vivio varios usuarios pongo algo como:
Código:
SELECT `ciudades` FROM `tabla` WHERE `id_user` IN(3,5,9)
El problema es que solo me muestra las ciudades del usuario que tiene el ID 3

Gracias