За последние 24 часа нас посетили 59105 программистов и 1811 роботов. Сейчас ищут 962 программиста ...

Проблема с проверкой сохраненных данных pdo

Тема в разделе "PHP для новичков", создана пользователем Roma_SP, 19 сен 2014.

  1. Roma_SP

    Roma_SP Новичок

    С нами с:
    11 сен 2013
    Сообщения:
    89
    Симпатии:
    0
    Всем привет! Делаю код для внесения новых записей в pdo, все нормально сохраняется.
    Проблема с проверкой, делаю $STH=='TRUE' чтобы при положительном результате вывел "Данные записаны", а всегда выводит "Данные не записаны", хотя в бд все сохранилось.
    Код (Text):
    1. $STH = $db->prepare("INSERT INTO users ( name, surname, login) values (:name, :surname, :login)");
    2. $STH -> execute(array(':name'=>$name, ':surname'=>$surname, ':login'=>$login));
    3. if ($STH=='TRUE'){
    4. echo "Данные записаны";
    5. }
    6. else{
    7. echo "Данные не записаны";
    8. }
     
  2. dapperkop

    dapperkop Активный пользователь

    С нами с:
    26 сен 2013
    Сообщения:
    890
    Симпатии:
    0
    Что тебя заставило выделить TRUE одинарными кавычками? Чтобы избежать непоняток в будущем, следует выполнять оператор строгого сравнения.
     
  3. Roma_SP

    Roma_SP Новичок

    С нами с:
    11 сен 2013
    Сообщения:
    89
    Симпатии:
    0
    Даже если в двойные то же самое будет
     
  4. dapperkop

    dapperkop Активный пользователь

    С нами с:
    26 сен 2013
    Сообщения:
    890
    Симпатии:
    0
    Что такое 'TRUE' или "TRUE"?
     
  5. Roma_SP

    Roma_SP Новичок

    С нами с:
    11 сен 2013
    Сообщения:
    89
    Симпатии:
    0
    А туплю, да лучше вообще убрать
     
  6. dapperkop

    dapperkop Активный пользователь

    С нами с:
    26 сен 2013
    Сообщения:
    890
    Симпатии:
    0
    Почему лучше?
     
  7. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Да, что это и почему лучше? =)
     
  8. Roma_SP

    Roma_SP Новичок

    С нами с:
    11 сен 2013
    Сообщения:
    89
    Симпатии:
    0
    Так работает
     
  9. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    круто. попробуй осознать что ты написал =) проговори по шагам весь свой код.
     
  10. jei

    jei Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    542
    Симпатии:
    0
    Зачем человека по догадкам водить.Если он не читал этого не поймёт.
    Ты в коде сравниваешь строку.А у тебя в объекте $STH какой тип данных?
    А тип данных у тебя называется булевый. TRUE FALSE который.
    Или миксед но при сравнений с TRUE если запись прошла даст правду.
    Вот а теперь можешь начинать читать книжку по пхп :)
     
  11. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    А с какого перепугу объект $STH после вызова метода должен превратиться в скалярное булево значение true или false?
    Код (Text):
    1. $STH = $db->prepare("INSERT INTO users ( name, surname, login) values (:name, :surname, :login)");
    2. $success = $STH -> execute(array(':name'=>$name, ':surname'=>$surname, ':login'=>$login));
    3. if ($success){
    4. echo "Данные записаны";
    5. }
    6. else{
    7. echo "Данные не записаны";
    8. }
     
  12. dapperkop

    dapperkop Активный пользователь

    С нами с:
    26 сен 2013
    Сообщения:
    890
    Симпатии:
    0
  13. jei

    jei Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    542
    Симпатии:
    0
    $STH не объект а результат выполнения объёктом $db метода prepare()
    Он мог бы просто вызвать $STH = prepare()
    Но так как это приватная функция в классе то к функций он может получить доступ только через объект.
    У объекта не обязательно тип данных должен быть миксед или аррей.Объект понятие абстрактное.
     
  14. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    jei, не взрывай людям мозг.
     
  15. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    $STH в данном коде - экземпляр класса PDOStatement, который возвращается функцией PDO::prepare(), то бишь объект. И оттого, что вызван его метод execute(), он не может стать вдруг ложью или истиной
    Функция, которую можно вызвать не из класса, не может быть приватной. С теорией не дружим
     
  16. jei

    jei Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    542
    Симпатии:
    0
    romach ???

    mkramer Слушай эта ошибка чисто машинальная с приват, паблик.А с практикой как раз таки ты не дружишь.
    И понятия для чего нужен объект у тебя нету.И я больше не собираюсь отвечать на твой посты.
     
  17. dapperkop

    dapperkop Активный пользователь

    С нами с:
    26 сен 2013
    Сообщения:
    890
    Симпатии:
    0
    jei, ну так а что будет с переменной STH, после вызова метода execute? Что в ней будет по-твоему?
     
  18. jei

    jei Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    542
    Симпатии:
    0
    1 -ое $STH является переменной здесь.Но стиль названия переменной с заглавной буквы не рекомендуемый.
    Это первое.
    2-ое Этот код он не сам написал а где то взял.Тут даже без разбора кода понятно по логике.
    Что вызван метод prepare() объекта $db который в случае записи должен вернуть либо ПРАВДУ либо ЛОЖЬ если не прошла запись. return FALSE;
    Так работают большинство классов для работы с базой данных.
    3-ее в переменную $STH попадает результат выполнения функций prepare() .Спросите как через return.Функция
    возвращает ретурном.
    Ну и 4-ое он не показал тут создание объекта $db класса Database то есть сверху идёт примерно такая строка
    $db = new Database();
    Поэтому может кто то не допонял.Откуда взялся объект $db.
     
  19. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    $STH здесь результат выполнения PDO::prepare(), т.е. либо объект PDOStatement (подготовленный запрос), либо FALSE в случае косяка, сравнивать тут с TRUE нет смысла вообще, да и вообще, лучше ловить исключения. Кстати, стиль названия переменной вполне нормален в данном случае.

    prepare() ничего не пишет в базу, а пример взят прямо из доков PHP.
    Вау.
     
  20. jei

    jei Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    542
    Симпатии:
    0
    Вау... Вау...И вам всего хорошего.