Нужно ли выбирать перед удалением в MySQL?

0

На моей странице администрирования веб-сайтов я могу удалить продукты из интернет-магазина, используя этот код php ниже. (Ajax вызывает этот php файл).

Мой вопрос в том, что мне нужно выбирать и проверять числовые строки, или удалять их, и просто сохранять и запускать запросы на удаление?

    <?php
include_once("../../files/connect.php");
if($_POST)
{
    $id = mysqli_real_escape_string($kapcs, $_POST['id']);
    $check = mysqli_query($kapcs, "SELECT termek_id, termek_thumb, termek_big FROM termek WHERE termek_id='$id' LIMIT 1");
    if(mysqli_num_rows($check) > 0 )
    {


        /*Galéria törlése, ha van*/
        $check_gallery = mysqli_query($kapcs, "SELECT * FROM gallery WHERE gallery_termek_id = '$id'");
        if(mysqli_num_rows($check_gallery) > 0 )
        {
            while($gall = mysqli_fetch_assoc($check_gallery))
            {
                $DestinationDirectory = "../../images/gallery/";
                if(file_exists($DestinationDirectory.$gall['gallery_thumb']))
                {
                    unlink($DestinationDirectory . $gall['gallery_thumb']); 
                }
                if(file_exists($DestinationDirectory.$gall['gallery_big']))
                {
                    unlink($DestinationDirectory . $gall['gallery_big']);   
                }
                mysqli_query($kapcs, "DELETE FROM gallery WHERE gallery_termek_id = '$id'") or die(mysqli_error($kapcs));
            }
        }

        /* Címkék törlése, ha van */
        $check_cimke = mysqli_query($kapcs, "SELECT termek_cimke_termek_id FROM termek_cimke WHERE termek_cimke_termek_id = '$id'");
        if(mysqli_num_rows($check_cimke) > 0 )
        {   
            mysqli_query($kapcs, "DELETE FROM termek_cimke WHERE termek_cimke_termek_id = '$id'");
        }



        mysqli_query($kapcs, "DELETE FROM hir_termek_kapcsolo WHERE hir_termek_kapcs_termek = '$id' ") or die("Delete error 2 - " . mysqli_error($kapcs));


        $del = mysqli_query($kapcs, "DELETE FROM termek WHERE termek_id = '$id'");
        if($del)
        {
            echo 'Delete ok';
        }
        else
        {
            echo 'Delete error;
        }
    }
    else
    {
        echo 'Nincs ilyen azonosítójú termék.';
    }
}
?>
  • 1
    вам нужно быть конкретным, какой sql?
Теги:

2 ответа

2

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

Запустите запрос удаления, и вы можете проверить количество затронутых строк, чтобы увидеть, было ли что-либо удалено или нет, и если да, сколько строк. Эта функция возвращает и целое число с количеством удаленных строк для запроса DELETE.

mysqli_query($kapcs, "DELETE FROM hir_termek_kapcsolo WHERE hir_termek_kapcs_termek = '$id' ") or die("Delete error 2 - " . mysqli_error($kapcs));
echo mysqli_affected_rows($kapcs)." rows deleted";

ПРЕДУПРЕЖДЕНИЕ
Вы уже используете API, который поддерживает подготовленные операторы с ограниченным вводом переменной, вы должны использовать параметризованные запросы с помощью заполнителей (подготовленных операторов) для защиты вашей базы данных от SQL-инъекций ! Начните работу с mysqli::prepare() и mysqli_stmt::bind_param().

1

Вам не нужно select перед delete.

Если строки не соответствуют условиям, то delete не удаляет строки.

  • 0
    Так зачем выбирать? Если нет подходящих строк, ничего не будет удалено.
  • 0
    Это твой код. Я не знаю, почему в нем есть select .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню