How do I know which information in my query does not meet the WHERE parameter?

1

I would like to know in what way I can know which data is not met when making my query to the database from PHP .

I mean I want to know in what way I can condition my code to know which parameter of the WHERE instruction is being violated.

It is for when someone incorrectly enters the data within a form, it is known if it is because there is not one of the parameters entered.

<?php   
    $con=mysqli_connect('127.0.0.1','root','','freatico') or die ('Error en la conexion');    
    $sql="SELECT Nivel FROM medicion WHERE idp='$_POST[pun]'and Nivel>=1.20";    
    $resultado=mysqli_query($con,$sql) or die ('Error en el query database');  
    //Valida que la consulta esté bien hecha  
    if( $resultado ){

     //Ahora valida que la consuta haya traido registros
    if( mysqli_num_rows( $resultado ) > 0){

    //Mientras mysqli_fetch_array traiga algo, lo agregamos a una variable temporal
    while($fila = mysqli_fetch_array( $resultado ) ){

      //Ahora $fila tiene la primera fila de la consulta, pongamos que tienes
      //un campo en tu DB llamado NOMBRE, así accederías
      echo $fila['Nivel'];
    }

    }
    else {
        echo 'NO EXISTE EL PUNTO/NO HAY PUNTOS CRITICOS';
    }

    //Recuerda liberar la memoria del resultado, 
    mysqli_free_result( $resultado );

    //Si ya no ocupas la conexión, cierrala
    mysqli_close( $con );

    }

    ?>
    
asked by Ângel Dâvíd Bermëo 22.05.2018 в 23:05
source

1 answer

0

The simplest solution is with several SELECT :

$ipd = intval($_POST[pun]);
$NivelMinimo = 1.20;

$sql="
  SELECT 
    (SELECT GROUP_CONCAT(Nivel) 
       FROM medicion 
        WHERE idp=".$idp." AND Nivel>=".$NivelMinimo."
    ) as NivelesIDValido,
    (SELECT count(*) 
       FROM medicion 
       WHERE idp=".$idp."
     ) AS cantidadIDsValidos,
    (SELECT count(*) 
       FROM medicion 
       WHERE Nivel>=".$NivelMinimo."
    ) AS cantidadNivelesValidos;
";

The GROUP_CONCAT returns a string that is a comma separated list. So we will have to modify the while / echo

if( $resultado ) {
  //Ahora valida que la consuta haya traido registros (la consulta va a traer siempre resultados pero no esta de mas comprobar)
  if( mysqli_num_rows( $resultado ) > 0){

  //Mientras mysqli_fetch_array traiga algo, lo agregamos a una variable temporal
  while($fila = mysqli_fetch_array( $resultado ) ){
    // Ahora $fila tiene la lista de Niveles+pid válidos, 
    // cuantos idp son válidos 
    // y cuantos Niveles son validos
    // var_dump($fila);
    if (!empty($fila['NivelesIDValido'])) { // si hay resultados
       echo 'PUNTOS CRITICOS: ' . $fila['NivelesIDValido']; 
    } else { // no hay resultados
      if ($fila['cantidadIDsValidos']==0) {
        echo 'NO EXISTE EL PUNTO ';
      }
      if ($fila['cantidadNivelesValidos']==0) {
         echo 'NO HAY PUNTOS CRITICOS ';
      }
    }
  }
}

Table example:

idp nivel
1   1.5
1   1.3
2   1.75
3   2
4   1.1

with $idp = 1 and $NivelMinimo = 1.20

The result is

NivelesIDValido cantidadIDsValidos  cantidadNivelesValidos
1.50,1.30               2                   4

PUNTOS CRITICOS: 1.50,1.30

with $idp = 1 and $NivelMinimo = 4.20

The result is

NivelesIDValido cantidadIDsValidos  cantidadNivelesValidos
(null)                   2                  0

NO HAY PUNTOS CRITICOS

with $idp = 15 and $NivelMinimo = 1.20

The result is

NivelesIDValido cantidadIDsValidos  cantidadNivelesValidos
(null)              0                        4

NO EXISTE EL PUNTO 

with $idp = 15 and $NivelMinimo = 4.20

The result is

NivelesIDValido cantidadIDsValidos  cantidadNivelesValidos
(null)                 0                   0

NO EXISTE EL PUNTO NO HAY PUNTOS CRITICOS
    
answered by 23.05.2018 в 00:02