За последние 24 часа нас посетили 17802 программиста и 1715 роботов. Сейчас ищут 940 программистов ...

Проверка на существование записи в таблице

Тема в разделе "PHP для новичков", создана пользователем RomanCasper, 9 янв 2015.

  1. RomanCasper

    RomanCasper Новичок

    С нами с:
    17 дек 2014
    Сообщения:
    46
    Симпатии:
    1
    Подскажите как сделать проверку на существование записи в таблице MySql .
    Я пробовал вот так:
    Код (Text):
    1. $str_sql_query2 = "SELECT g_fcast FROM group_$_POST[group_id] WHERE g_fcast=$_POST[match_id]"; 
    2.             if (!$result1 = mysql_query($str_sql_query2, $db)){
    3.                 $str_sql_insert = "INSERT INTO group_$_POST[group_id] SET g_fcast='$_POST[match_id]', g_fres='$_POST[answer]', g_fcomm='$_POST[answer_text]'";
    4.                 mysql_query($str_sql_insert, $db);
    5.                 echo "новые данные в таблицу занесены";
    6.             } else {
    7.                 $str_sql_update1 = "UPDATE group_$_POST[group_id] SET  g_fres='$_POST[answer]', g_fcomm='$_POST[answer_text]' WHERE g_fcast='$_POST[match_id]'";
    8.                 mysql_query($str_sql_update1, $db);
    9.                 echo "данные в таблице group_$_POST[group_id] поменялись";
    10.             }
    В общем если нет записи в которой g_fcast=$_POST[match_id], то нужно создать новую, а если есть то поменять значения.
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    1. некорректное создание запросов. после объявления строки сделай её дамп и посмотри какие там на самом деле данные.
    2. включи максимальный уровень вывода ошибок и включи вывод ошибок на экран - пусть пхп тебя ругает за кривой код а ты соответственно старайся писать всегда прямой код.
    3. всегда будет считаться что запись существует до тех пор пока запрос не завершится ошибкой. потому что ты неправильно работаешь с субд. функция query() возвращает не ответ от базы данных с кортежами а ресурс на результат. даже нулевое кол-во строк - это результат. а результат это истина. а у тебя истина - признак существования строк. внимательно прочитай мануал по выбранному инструменту работы с субд. и да, сейчас прибегут мальчики которые будут говорить что mysql устарело и надо использовать mysqli или pdo - слушай их и соглашайся.
     
  3. RomanCasper

    RomanCasper Новичок

    С нами с:
    17 дек 2014
    Сообщения:
    46
    Симпатии:
    1
    Тогда каким образом мне проверь запись на существавание? С цикле прогнать всю таблицу и сравнивать каждое значение? Мне что это будет не правильно
     
  4. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    такое ощущение что ты голову не включаешь. вот этот вот прогон с прогоном всей таблицы - это дебильная идея. то что у тебя написано - выборка строки по условию - это правильная иделя но дебильная реализация. написано было тебе русским по белому пойти в мануал и подобрать правильную функцию для развития уже существующий у тебя реализации а не для изобретения бессмысленного и беспощадного костыля. или например можешь почитать листинг вот этого комментария (заранее сорри за сложночитаемый код - там перевод на язык местного клоуна) и подумать какого единственного фрагмента у тебя не хватает.
     
  5. RomanCasper

    RomanCasper Новичок

    С нами с:
    17 дек 2014
    Сообщения:
    46
    Симпатии:
    1
    Спасибо за помощь. поменял mysql_query на mysql_fetch_array теперь работает.
     
  6. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    поменял? одно на другое? одно без другого не должно работать какбэ))))))))
     
  7. RomanCasper

    RomanCasper Новичок

    С нами с:
    17 дек 2014
    Сообщения:
    46
    Симпатии:
    1
    Я понял что использовать mysql_query в условии было глупо. Так как ты сказал результат будет true в случает правильного написания запроса. И поменял его на mysql_fetch_array . Но чтобы работало mysql_query перед условием тоже есть. Код для наглядности:
    Код (Text):
    1.  
    2. $str_sql_query2 = "SELECT g_fcast FROM group_$_POST[group_id] WHERE g_fcast=$_POST[match_id]";
    3. $result1 = mysql_query($str_sql_query2, $db);  
    4. if (!mysql_fetch_array($result1)){
    5. //если нет записи
    6. }
    7. else {
    8. //если есть запись
    9. }
     
  8. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    молодец! ждем тебя с новыми интересными задачами)))