Пустая регистрация в 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, но это не работает для меня.
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);
}
Один из способов сделать это-использовать собственный оператор 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
Предполагая, что это функция и переменные ($nombre
, $ruta,
$periodo
) Вы получаете их, в идеале вы должны запустить UPDATE
всегда и проверить через
if($conexion->affected_rows == 0){
//ejecutar el INSERT
}