[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Удаление строк из базы и файлов с даным именем
Evilsoul
Я тут галерею решил сделать, дабы проверить свой уровень знаний :)
Задача такая: удалить строки из базы и файлы с именем которое хранится в этих строках.
/**
* Gallery removal
* Удаление галереи
*/

if($delete)
{
$res3 = mysqlQuery("SELECT `fname`
FROM `images`
WHERE `aid`="
.(int)$POST['value3']
);


while ($row = mysql_fetch_assoc($res3))
{
unlink(IRB_ROOT . '/uploads/galleries/' . $row['fname']);
unlink(IRB_ROOT . '/uploads/galleries/preview/small_' . $row['fname']);
}

mysqlQuery("DELETE FROM `images`
WHERE `aid`="
. (int)$POST['value3']
);


mysqlQuery("DELETE FROM `galleries`
WHERE `id` = "
. (int)$POST['value3']
);


reDirect();
}

Этот код работает, но мне интересно, возможно это сделать без запроса SELECT, другими словами: может есть функция которая при удалении возвращает массив удаленных данных?



Спустя 29 минут, 5 секунд (24.01.2011 - 16:25) Renden написал(а):
Evilsoul
Насколько я знаю такой функции нет, есть 2 вариата удаления:
1 DELETE - построчное удаление с возвращением количества удаленных записей
2 TRUNCATE - удяляет таблицу а потом восоздает, ничего не возвращая.
Больше вроде вариантов и нет.. dry.gif

Спустя 6 минут, 17 секунд (24.01.2011 - 16:32) Evilsoul написал(а):
Renden
Да, то что количество вернуть можно я знаю, но мне нужно именно имя файла вытащить из столбца `fname`.

Спустя 37 минут, 23 секунды (24.01.2011 - 17:09) linker написал(а):
Все зависит от того, как ты хранишь файлы, т.е. какие имена ты им присваиваешь. Можно сделать так, что SELECT не понадобится.

Спустя 3 минуты, 1 секунда (24.01.2011 - 17:12) Evilsoul написал(а):
linker
хотелось бы что бы это не имело значения...
на записи обрабатываю mysql_escape_string() на выводе htmlspecialchars().
ну а в принципе думаю при записи сделать проверку и записывать только имена на латинице, цифры, тире, подчеркивание.

Спустя 5 минут, 3 секунды (24.01.2011 - 17:17) linker написал(а):
Тогда SELECT твой друг.

Спустя 10 минут, 21 секунда (24.01.2011 - 17:27) Evilsoul написал(а):
Жаль, но всё же спасибо.

Спустя 4 часа, 44 минуты, 19 секунд (24.01.2011 - 22:12) Evilsoul написал(а):
И + за активную помощь smile.gif

Спустя 33 минуты, 22 секунды (24.01.2011 - 22:45) sergeiss написал(а):
Цитата (Evilsoul @ 24.01.2011 - 16:56)
может есть функция которая при удалении возвращает массив удаленных данных?

Есть такая возможность :) Но только в PostgreSQL.

DELETE ...... RETURNING *
UPDATE ...... RETURNING *
INSERT ....... RETURNING *

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

Спустя 2 часа, 51 минута, 38 секунд (25.01.2011 - 01:37) Evilsoul написал(а):
Интересно, начал искать и нашел, но оч. мало, в mysql и oracle есть функция RETURN() но действие и как использовать я так и не понял ибо описания оч. мало и без примеров..(

А где вообще можно глянуть нормальную опись баз, возможностей желательно в сравнении друг с другом.

Спустя 8 часов, 35 минут, 1 секунда (25.01.2011 - 10:12) linker написал(а):
В MySQL - RETURN используется онли в хранимых процедурах, насколько мне известно.

Спустя 10 минут, 59 секунд (25.01.2011 - 10:23) Evilsoul написал(а):
эээх, а я уж было понадеялся...

Спустя 6 часов, 35 минут, 52 секунды (25.01.2011 - 16:59) Evilsoul написал(а):
Ребят, а вот эту часть:
        mysqlQuery("DELETE FROM `images`
WHERE `aid`="
. (int)$POST['value3']
);


mysqlQuery("DELETE FROM `galleries`
WHERE `id` = "
. (int)$POST['value3']

можно сделать одним запросом?


_____________
Кто хочет, ищет возможности, кто не хочет - причины. /_ К. Маркс
Истенно велик тот человек который сумел овладеть своим временем. /_Гесиод VIII-VII вв. до Р. Х.
Медлительный непрерывно борится с бедами всю жизнь. /_Гесиод VIII-VII вв. до Р. Х.
Для того что бы увидеть радугу нужно пережить дождь.
Женщины: Хочется чего-то красного но синего.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.