ФорумПрограммированиеPHP для идиотов → Проверка перед составлением запроса в БД

Проверка перед составлением запроса в БД

  • Sin

    Сообщения: 80 Репутация: N Группа: Адекваты

    Spritz 30 ноября 2008 г. 9:49, спустя 3 минуты 39 секунд

    Array ( [0] => Array ( [username] => vasya [userpass] => 1234 [age] => 34 ) )
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 30 ноября 2008 г. 9:53, спустя 4 минуты 1 секунду

    это вот это??

    $sql = "SELECT username FROM `name_db` WHERE username='$username'";
    $result = mysql_query($sql);
    for ($data=array(); $row = mysql_fetch_assoc($result); $data[]=$row);

    ??
    не верю 100%. в лучшем случае у вас в массиве должно быть username это во первых, во вторых Array ( [0] => Array это не имеет отношения к if (!isset($data['username'])){
    Сапожник без сапог
  • Sin

    Сообщения: 80 Репутация: N Группа: Адекваты

    Spritz 30 ноября 2008 г. 9:55, спустя 2 минуты 43 секунды

    ах да. поправка…
    я проверял с таким кодом
    $sql = "SELECT * FROM `name_db` WHERE username='$username'";
    $result = mysql_query($sql);
    for ($data=array(); $row = mysql_fetch_assoc($result); $data[]=$row);
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 30 ноября 2008 г. 9:58, спустя 2 минуты 25 секунд

    а это явно не проверил.

    во вторых Array ( [0] => Array это не имеет отношения к if (!isset($data['username'])){
    Сапожник без сапог
  • Sin

    Сообщения: 80 Репутация: N Группа: Адекваты

    Spritz 30 ноября 2008 г. 10:15, спустя 17 минут 2 секунды

    ну вот всё и выяснилось. всего-то во всём коде надо было изменить строчку

    if ($data[0]['username'] == ""){
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 30 ноября 2008 г. 10:18, спустя 2 минуты 47 секунд

    вы правы, но изначальная ошибка - так писать :)

    а вообще на кой хрен вам foreach если у вас все равно интересует первая строка в бд, выкиньте к чертям форич и оставьте $data = mysql_fetch_assoc($result);

    и можете использовать как раньше if($data['username']) …

    до кучи - код в книгах - полное Г. его использовать не стоит. лучше сомтреть код на php.net и до кучи думать как лучше.
    Сапожник без сапог
  • Sin

    Сообщения: 80 Репутация: N Группа: Адекваты

    Spritz 30 ноября 2008 г. 10:27, спустя 9 минут 38 секунд

    phpdude, я извиняюсь за то, что погорячился и нагрубил. Просто накипело и достало, что на каждом форуме каждый пытается показать из себя афигенно умного, а на самом деле 0. Не имею ввиду Вас.

    Цикл foreach мне так и так придётся там использовать. я же должен обработать и внесни в БД все переменные.
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 30 ноября 2008 г. 10:32, спустя 5 минут 12 секунд

    ну тогда используйте foreach, но советую использовать всетаки while как это более рационально, есть пистоелт позволяет забивать гвозди, то часто ли им забивают их? нет, для этих целей есть молоток!))

    я сорвался хз почему. потому что код каша, ненавижу плохой код )) прости короч )
    Сапожник без сапог
  • Sin

    Сообщения: 80 Репутация: N Группа: Адекваты

    Spritz 30 ноября 2008 г. 10:39, спустя 6 минут 32 секунды

    что-то я не пойму чем while рациональнее?!
    C while разве не больше строчек кода получится?
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 30 ноября 2008 г. 10:41, спустя 2 минуты 16 секунд

    дело не в строчках кода, а в том, как это будет восприниматься следующим после тебя программистом, всегда думай что ты кому то это передавать дальше будешь, а если он не слышал про for с таким применением?))) уверен многие такого использования for не знают. все ушел спать. спокойной.
    Сапожник без сапог
  • Z-MODe

    Сообщения: 199 Репутация: N Группа: Кто попало

    Spritz 30 ноября 2008 г. 16:13, спустя 5 часов 32 минуты 10 секунд

    ИМХО сделал бы так
    $record = mysql_fetch_assoc(mysql_query( "SELECT COUNT(*) FROM `name_db` WHERE username='$username'"));
    if ($record['COUNT(*)'] > 0) {
    //апдейт
    }
    else {
    //инсерт
    }
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 30 ноября 2008 г. 19:18, спустя 3 часа 4 минуты 41 секунду

    Sin, эту конструкцию


    if (!isset($data['username'])){
     $sql_i = "INSERT INTO `name_db` VALUES ('$username', '$userpass', '$age')";
     $result_i = mysql_query($sql_i);
    } else {
     $sql_u = "UPDATE `name_db` SET userpass='$userpass', age='$age' WHERE username='$username'";
     $result_u = mysql_query($sql_u);
    }


    Можно заменить на:
    Вешаем на username уникальный индекс, не только UNIQUE (вопросы в ман по MySQL).


    mysql_query("insert into `name_db` (`username`, `userpass`, `age`) values ('$username', '$userpass', '$age') on duplicate key update `userpass` = '$userpass', `age` = '$age' ");


    Теперь, если username у нас уже есть, то мы обновляем у него информацию, а если нет, то создаем новую запись.
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • Professor

    Сообщения: 2089 Репутация: N Группа: Адекваты

    Spritz 30 ноября 2008 г. 23:15, спустя 3 часа 56 минут 59 секунд

    Или же используем REPLACE.
    Почему никому не нравится REPLACE?? =(
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 1 декабря 2008 г. 0:02, спустя 46 минут 26 секунд


    Или же используем REPLACE.
    Почему никому не нравится REPLACE?? =(


    а ты почитай сравнение REPLACE и ON DUPLICATE KEY, потом спрашивай
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • Professor

    Сообщения: 2089 Репутация: N Группа: Адекваты

    Spritz 1 декабря 2008 г. 1:04, спустя 1 час 2 минуты 44 секунды

    А я думал они одинаковы! =)
    Я ошибся =)

Пожалуйста, авторизуйтесь, чтобы написать комментарий!