Всем привет! Делаю код для внесения новых записей в pdo, все нормально сохраняется. Проблема с проверкой, делаю $STH=='TRUE' чтобы при положительном результате вывел "Данные записаны", а всегда выводит "Данные не записаны", хотя в бд все сохранилось. Код (Text): $STH = $db->prepare("INSERT INTO users ( name, surname, login) values (:name, :surname, :login)"); $STH -> execute(array(':name'=>$name, ':surname'=>$surname, ':login'=>$login)); if ($STH=='TRUE'){ echo "Данные записаны"; } else{ echo "Данные не записаны"; }
Что тебя заставило выделить TRUE одинарными кавычками? Чтобы избежать непоняток в будущем, следует выполнять оператор строгого сравнения.
Зачем человека по догадкам водить.Если он не читал этого не поймёт. Ты в коде сравниваешь строку.А у тебя в объекте $STH какой тип данных? А тип данных у тебя называется булевый. TRUE FALSE который. Или миксед но при сравнений с TRUE если запись прошла даст правду. Вот а теперь можешь начинать читать книжку по пхп
А с какого перепугу объект $STH после вызова метода должен превратиться в скалярное булево значение true или false? Код (Text): $STH = $db->prepare("INSERT INTO users ( name, surname, login) values (:name, :surname, :login)"); $success = $STH -> execute(array(':name'=>$name, ':surname'=>$surname, ':login'=>$login)); if ($success){ echo "Данные записаны"; } else{ echo "Данные не записаны"; }
$STH не объект а результат выполнения объёктом $db метода prepare() Он мог бы просто вызвать $STH = prepare() Но так как это приватная функция в классе то к функций он может получить доступ только через объект. У объекта не обязательно тип данных должен быть миксед или аррей.Объект понятие абстрактное.
$STH в данном коде - экземпляр класса PDOStatement, который возвращается функцией PDO:repare(), то бишь объект. И оттого, что вызван его метод execute(), он не может стать вдруг ложью или истиной Функция, которую можно вызвать не из класса, не может быть приватной. С теорией не дружим
romach ??? mkramer Слушай эта ошибка чисто машинальная с приват, паблик.А с практикой как раз таки ты не дружишь. И понятия для чего нужен объект у тебя нету.И я больше не собираюсь отвечать на твой посты.
1 -ое $STH является переменной здесь.Но стиль названия переменной с заглавной буквы не рекомендуемый. Это первое. 2-ое Этот код он не сам написал а где то взял.Тут даже без разбора кода понятно по логике. Что вызван метод prepare() объекта $db который в случае записи должен вернуть либо ПРАВДУ либо ЛОЖЬ если не прошла запись. return FALSE; Так работают большинство классов для работы с базой данных. 3-ее в переменную $STH попадает результат выполнения функций prepare() .Спросите как через return.Функция возвращает ретурном. Ну и 4-ое он не показал тут создание объекта $db класса Database то есть сверху идёт примерно такая строка $db = new Database(); Поэтому может кто то не допонял.Откуда взялся объект $db.
$STH здесь результат выполнения PDO:repare(), т.е. либо объект PDOStatement (подготовленный запрос), либо FALSE в случае косяка, сравнивать тут с TRUE нет смысла вообще, да и вообще, лучше ловить исключения. Кстати, стиль названия переменной вполне нормален в данном случае. prepare() ничего не пишет в базу, а пример взят прямо из доков PHP. Вау.