Пустая регистрация в SQL с PHP


я регистрирую имя нескольких изображений в базе данных, но я не хочу дублировать его. Поэтому мне нужно знать, как это сделать, чтобы узнать, находится ли он в базе данных или нет.

это код:

// Establecer y realizar consulta
        $sql = "SELECT * FROM ImpresionesTotales WHERE nombre = '$nombre'";
        //$sql = "INSERT INTO ImpresionesTotales(nombre, carpeta, periodo, total) VALUES ('$nombre', '$ruta', '$periodo', 1)";
        $resultado = mysqli_query($conexion, $sql)
        or die ("Algo ha ido mal en la consulta a la base de datos");
        //echo $sql;
            while($fila = mysqli_fetch_assoc($resultado)){
                    $totalBD = $fila['total'];

                    // Si la imagen existe en la base de datos
                    if($nombre == $fila['nombre']){
                        // Sumar contador de ImpresionesTotales
                        $sql = "UPDATE ImpresionesTotales SET total=".$totalBD."+1 WHERE nombre = '$nombre '";
                        $resultado = mysqli_query($conexion, $sql) 
                        or die ("Algo ha ido mal en la consulta a la base de datos");
                        mysql_query($sql);
                        //echo $sql;
                        //echo $fila['nombre'];
                    }//end if
                    else{ ////////////Aquí es donde os digo, que no se como 
                    ////////////////////////////////////////////hacer para decir que la imagen no esta en la BD
                        $sql = "INSERT INTO ImpresionesTotales(nombre, carpeta, periodo, total) VALUES ('$nombre', '$ruta', '$periodo', +1)";
                        $resultado = mysqli_query($conexion, $sql) 
                        or die ("Algo ha ido mal en la consulta a la base de datos");
                        mysql_query($sql);
                    }
            }//end while

        // Cerrar conexión de base de datos
        mysqli_close($conexion);

я пытался сделать else, но это не работает для меня.

 2
Author: Shaz, 2018-04-27

3 answers

Кажется, что вы хотите знать, Антер для вставки, существует ли запись для вставки или обновления.

Один из способов сделать это-использовать функцию mysqli_num_rows () которая возвращает нам количество строк результата запроса. Таким образом, если количество строк больше нуля, это означает, что запись существует, в противном случае она не существует.

Я оставляю вам пример, основанный на вашем коде:

 //Consultamos si el registro está en la base de dato    
        $sql = "SELECT * FROM ImpresionesTotales WHERE nombre = '$nombre'";
        $resultado = mysqli_query($conexion, $sql)
        or die ("Algo ha ido mal en la consulta a la base de datos");


           if(mysqli_num_rows($resultado)>0){
               //Hemos obtenido valores por lo tanta actualizamos
               $sql = "UPDATE ImpresionesTotales SET total=".$totalBD."+1 WHERE nombre = '$nombre '";
               $resultado = mysqli_query($conexion, $sql)
               or die ("Algo ha ido mal en la consulta a la base de datos");


           }else{
                //La consulta no devolvió nada por lo  tanto insertamos el valor
               $sql = "INSERT INTO ImpresionesTotales(nombre, carpeta, periodo, total) VALUES ('$nombre', '$ruta', '$periodo', +1)";
               $resultado = mysqli_query($conexion, $sql)
               or die ("Algo ha ido mal en la consulta a la base de datos");
           }

        // Cerrar conexión de base de datos
        mysqli_close($conexion);
       }
 2
Author: ErnestoRM, 2018-04-27 13:23:57

Один из способов сделать это-использовать собственный оператор MySQL INSERT .. ON DUPLICATE KEY.

Эта команда позволяет при вставке новой записи, если ключ уже существует в таблице, вместо вставки выполняется обновление.

Для вашего случая запрос будет выглядеть следующим образом:

    $sql = "INSERT INTO ImpresionesTotales(nombre, carpeta, periodo, total)
            VALUES ('$nombre', '$ruta', '$periodo', 1)
            ON DUPLICATE KEY UPDATE total=total + 1";

    mysqli_query($conexion, $sql) or die ("Algo ha ido mal en la consulta a la base de datos");
    mysqli_close($conexion);

Необходимо отметить, что:

  • таблица должна иметь определенный первичный ключ
  • нет способа различать, когда вы делаете UPDATE или INSERT
 2
Author: Roberto Vaccaro, 2018-04-27 13:48:36

Предполагая, что это функция и переменные ($nombre, $ruta, $periodo) Вы получаете их, в идеале вы должны запустить UPDATE всегда и проверить через

if($conexion->affected_rows == 0){
//ejecutar el INSERT
}
 1
Author: JACK, 2018-04-27 13:33:17