[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: проверка информации перед сохранением в базу данны
vio1984
мои сайт передаёт переменную $TITLE из формы в файл обработки, но тут я столкнулся с проблемою, перед тем как сохранить информацию в базу данных я хочу проверить есть ли такой TITLE уже в базе или нет
пытался сравнить


$r = mysql_query ("SELECT title FROM text");
$ro = mysql_fetch_array ($r);

if ($TITLE == $ro['TITLE'])
{
echo "такой TITLE уже существует";
}


но в этом случае код сравнивает толка с первым столбцом из базы, а как можна сделать проверку всех TITLE в базе данных, и если есть такой TITLE то даст ошибку а если нет то продолжит далее....



Спустя 2 минуты, 54 секунды (8.11.2010 - 12:41) Lenarfate написал(а):
"SELECT COUNT(*) AS `cnt`   
FROM `text`
WHERE `title` =
$TITLE"


далее проверяешь, если mysql_result() вернет ноль, то записываешь, если нет(т.е. такая запись уже есть), выдаешь сообщение об ошибке

Спустя 32 минуты, 30 секунд (8.11.2010 - 13:14) sergeiss написал(а):
Lenarfate - а почему бы не использовать один запрос, который достаточно "сильный" именно в MySQL? Я про "INSERT ... ON DUPLICATE KEY UPDATE ..."

Спустя 20 минут, 19 секунд (8.11.2010 - 13:34) Lenarfate написал(а):
ON DUPLICATE KEY UPDATE вроде же обновляет запись, если дублируется оная с уникальным ключем??

Спустя 17 минут, 17 секунд (8.11.2010 - 13:51) linker написал(а):
Такой запрос
INSERT IGNORE ...
и такой пых-код
if (!mysql_affected_rows())
echo "Такая запись уже существует";
else
echo "Успешно добавлено";

Спустя 11 минут, 7 секунд (8.11.2010 - 14:03) vio1984 написал(а):
Цитата (linker @ 8.11.2010 - 10:51)
Такой запрос
INSERT IGNORE ...
и такой пых-код
if (!mysql_affected_rows())
    echo "Такая запись уже существует";
else
    echo "Успешно добавлено";

а можно поподробнее насчет INSERT IGNORE, я если честно с ним не сталкивался...

Спустя 18 минут, 22 секунды (8.11.2010 - 14:21) linker написал(а):
1. Если без IGNORE и записи не существует, то произойдет успешное добавление и mysql_affected_rows() вернет количество добавленных строк.
2. Если без IGNORE и запись по ключу существует, то вывалится ошибка.
3. Если с IGNORE и запись по ключу существует, то никаких ошибок не будет, а mysql_affected_rows() вернет нулевой результат, т.к. ничего не было добавлено.

Спустя 1 час, 31 минута, 50 секунд (8.11.2010 - 15:53) vio1984 написал(а):
проблему с добавлениям я решил как Lenarfate посоветовал, но тепер столкнулся с другою, когда я пытаюсь сделать изменения в листе и перезаписать в базе он мне выдаёт то что такои титле уже существует, (как говорится за что боролся на то и напоролся) хотя я TITLE оставил как был, вазможно ли как-то изменит СКРИПТ чтобы он проверял но не трогал тот ID с которого идет запрос?

$r = mysql_query ("
SELECT COUNT(*) AS `cnt`FROM `text` WHERE `title` = '$TITLE'"
);
$ro = mysql_fetch_array ($r);

if (mysql_result($r, 0) > 0)
{
echo "такой TITLE уже существует";
}




или может есть другой вариант решения данной проблемы?

Спустя 38 минут, 49 секунд (8.11.2010 - 16:32) linker написал(а):
Когда требуется изменение уже существующей записи, то алгоритм другой, а точнее банальный запрос вида, например,
UPDATE `table` SET `field` = 'значение' WHERE `id` = 1

Спустя 27 минут, 33 секунды (8.11.2010 - 16:59) sergeiss написал(а):
...и в итоге, похоже, приходим к уже упоминавшемуся мной в этой теме "INSERT ... ON DUPLICATE KEY UPDATE ..." smile.gif

Потому что, как я понял, ТС надо именно проверить наличие записи с определенным id и при её отсутствии вставить. А кто мешает проапдейтить и поставить тот же id, что уже был? Для того, чтобы был один-единственный запрос, включающий в себя как анализ, так и действие.

Спустя 15 секунд (8.11.2010 - 16:59) vio1984 написал(а):
Цитата (linker @ 8.11.2010 - 13:32)
Когда требуется изменение уже существующей записи, то алгоритм другой, а точнее банальный запрос вида, например,
UPDATE `table` SET `field` = 'значение' WHERE `id` = 1

это действительно банальный запрос, но я не это имел ввиду

Спустя 7 часов, 2 минуты, 11 секунд (9.11.2010 - 00:02) linker написал(а):
vio1984
Тогда объяснись подробнее.
Быстрый ответ:

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