Сделать 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
}
я продолжаю загружать еще одну запись ... Ну, если кто-то может дать мне решение, так как я очень благодарен. Надеюсь, Айя поняла вопрос. Приветствие всему сообществу!
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
}
?>
Попробуйте и прокомментируйте.
Хорошо, предварительная проверка не требуется, если у вас есть первичный ключ, такой как 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;