Сделать Insert, если в столбце нет значения, но сделать update


Привет, я хотел прокомментировать, что я хочу сделать Insert, но проверить, существует ли значение в столбце таблицы, прежде чем выполнять его, если я выполняю update только по значению столбца.

я передаю им код, как у меня есть:

if(in_array($type, array('gif', 'jpg', 'jpeg', 'png', 'php'))) {


if (!file_exists($carpeta)) {
mkdir($carpeta, 0777, true);

}


    if(is_uploaded_file($_FILES['userImage']['tmp_name'])) {
        if(move_uploaded_file($_FILES['userImage']['tmp_name'], $url)) {

            // AHORA TENDRIA q verrificar si existe el nombre del archivo en 
 //la TABLA ARCHIVOS y hago un update a la fechamod del mismo/


$cnombre= "SELECT idarchivo,nombre FROM archivos WHERE nombre = '$nombre' 
AND idpersona = '$idpersona' AND idcategoria = '$idcategoria' AND idcarpeta 
= '$idcarpeta'";
if($conn->query($cnombre) === TRUE) {

$sql="UPDATE archivos set nombre='$nombre'


            where idarchivo='$row[idarchivo]'";}else{






// sino existe lo inserto 


            $sql = "INSERT INTO archivos 
(idpersona,idcategoria,idcarpeta,nombre,url,tipo,tama,fechamod,fecha,estado) 

                    VALUES 






    ('$idpersona','$idcategoria','$idcarpeta','$nombre',
    '$url','$type','$tama','$fechamod','$fecha','$estado')";


            if($conn->query($sql) === TRUE) {
                $valid['success'] = true;
                $valid['messages'] = "Successfully Uploaded";
            } 

            else  {

                $valid['success'] = false;
                $valid['messages'] = "Error while uploading";

                  }

            $conn->close();

        }
        else {
            $valid['success'] = false;
            $valid['messages'] = "Error while uploading";

        }
    }
}

echo json_encode($valid);

// upload the file 
}

я продолжаю загружать еще одну запись ... Ну, если кто-то может дать мне решение, так как я очень благодарен. Надеюсь, Айя поняла вопрос. Приветствие всему сообществу!

Author: Santiago Gonzalez, 2017-09-28

2 answers

Вы можете попробовать таким образом, код прокомментирован, мне кажется, что это логическая ошибка больше всего.

   <?php
if(in_array($type, array('gif', 'jpg', 'jpeg', 'png', 'php'))) {


    if (!file_exists($carpeta)) {
        mkdir($carpeta, 0777, true);

    }


    if(is_uploaded_file($_FILES['userImage']['tmp_name'])) {
        if(move_uploaded_file($_FILES['userImage']['tmp_name'], $url)) {

            // AHORA TENDRIA q verrificar si existe el nombre del archivo en 
 //la TABLA ARCHIVOS y hago un update a la fechamod del mismo/

//declarar variable booleana
            $existe = false;

            $cnombre= "SELECT idarchivo,nombre FROM archivos WHERE nombre = '$nombre' 
            AND idpersona = '$idpersona' AND idcategoria = '$idcategoria' AND idcarpeta 
            = '$idcarpeta'";
//ejecutar query
            $result = $conn->query($cnombre);
//tienes que revisar estar parte porque no conozco la forma en que esta construido, lo que quiero validar es si la consulta tiene 1 es que ya existe, si tiene 0 no existe
            $count=mysqli_num_rows($result);

            if($count > 0) {
                $existe = true;
            }

            if($existe == true){
                while ($row=mysqli_fetch_array($result)){
                    $idArchivo = $row['idarchivo'];
                }

                $sql="UPDATE archivos set nombre='$nombre' where idarchivo='$idarchivo'";
            }

            if($existe == false){
               while ($row=mysqli_fetch_array($result)){
                $idArchivo = $row['idarchivo'];
                $nombre = $row['nombre'];

            }
            $sql = "INSERT INTO archivos 
            (idpersona,idcategoria,idcarpeta,nombre,url,tipo,tama,fechamod,fecha,estado) 

            VALUES 

            ('$idpersona','$idcategoria','$idcarpeta','$nombre',
            '$url','$type','$tama','$fechamod','$fecha','$estado')";
        }
// sino existe lo inserto 




        if($conn->query($sql) === TRUE) {
            $valid['success'] = true;
            $valid['messages'] = "Successfully Uploaded";
        } 

        else  {

            $valid['success'] = false;
            $valid['messages'] = "Error while uploading";

        }

        $conn->close();

    }
    else {
        $valid['success'] = false;
        $valid['messages'] = "Error while uploading";

    }
}
}

echo json_encode($valid);

// upload the file 
}
?>

Попробуйте и прокомментируйте.

 0
Author: Luis A, 2017-09-28 12:04:21

Хорошо, предварительная проверка не требуется, если у вас есть первичный ключ, такой как idфайл, вы можете использовать REPLACE INTO, в вашем случае, поскольку вы используете только один столбец, правильнее сделать insert с insert .. on duplicate key

Для вашего примера:

    INSERT INTO t1 (a,b,c) VALUES (1,2,3)
  ON DUPLICATE KEY UPDATE c=c+1;
 0
Author: web developing, 2017-09-28 14:01:16