Foros del Web » Programando para Internet » PHP »

Problema con SELECT IN y BIND_PARAM

Estas en el tema de Problema con SELECT IN y BIND_PARAM en el foro de PHP en Foros del Web. Hola a todos podrian decirme como puedo hacer funcionar este codigo Código PHP:      function  datos ( $conexion ,  $consulta ,  $datos ,  $informacion ,  ...
  #1 (permalink)  
Antiguo 23/01/2016, 08:20
 
Fecha de Ingreso: julio-2014
Mensajes: 115
Antigüedad: 9 años, 9 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
  #2 (permalink)  
Antiguo 24/01/2016, 09:00
 
Fecha de Ingreso: julio-2014
Mensajes: 115
Antigüedad: 9 años, 9 meses
Puntos: 1
Respuesta: Problema con SELECT IN y BIND_PARAM

En otro script que tengo en vez de IN utilizo OR con varios parametros de una tabla y funciona,¿ seria una alternativa utilizar?:
Código:
SELECT `ciudades` FROM `tabla` WHERE `id_user` =3 OR `id_user` =5 OR `id_user` =9

Última edición por jonyjdv; 24/01/2016 a las 12:59

Etiquetas: mysql, registro, select, sql, tabla, usuarios, variable
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:51.