Как правильно сформировать запрос mysql в pdo?

Здравствуйте, У меня есть два вопроса: Как правильно сформировать массив подстановки в execute? Как создать метод save, который будет решать, что делать с новостью (вставлять новую в базу или обновлять старую) ?
Запрос к базе:
'UPDATE news (title, text) VALUES (:title, :text) WHERE id=:id'


p.s В методе save мы можем получить все id из базы и сравнить их с id новой новости, если id совпадает - заменить, если такого id нет - вставить новую новость. Проблема заключается в том, как я считаю, что будет очень большая нагрузка, когда новостей станет слишком много. Это лишь мои мысли, поправьте, если я не прав.
  • Вопрос задан
  • 171 просмотр
Пригласить эксперта
Ответы на вопрос 2
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
массив в вашем случае будет следующего формата:
$replacers = array(
"title" =>"some title",
"text" =>"some text",
"id" =>"some id"
);
что легко ищется в документации вообще то....
Что касается сохранения - очевидно, что редактируемая новость будет иметь ненулевой id, в случае отсутствия значения в этом поле делаем вывод что это добавление, а не редактирование.
По поводу нагрузки - если вы сможете добавлять хотя бы новость в минуту, и вас (добавляльщиков) будет 50-100, это вообще никак на нагрузке на базу не отразится. 1 запрос в секунду база даже не заметит.
Ответ написан
Комментировать
FanatPHP
@FanatPHP
Чебуратор тега РНР
PDO к вопросу не имеет ни малейшего отношения.

Вопрос только в том, как определить, нужен ли нам запрос UPDATE или INSERT. причем вопросы высосан из пальца. Начинающие пользователи пхп очень часто предаются мечтаниям вместо того чтобы писать код. И из таких мечтаний получаются вопросы типа
В методе save мы можем получить все id из базы и сравнить их с id новой новости

Если бы автор занимался написанием кода, а не мечтаниями, то сразу бы увидел, что никакого id у новой записи в принципе нет, и быть не может. Что и является признаком, по которому мы определяем, какой запрос выполнить. И таким образом задача "получить все id из базы и сравнить их с id новости" исчезает сама собой, а в месте с ней и страхи про ужасную нагрузку на БД.

В порядке благотворительности можно, впрочем, рассказать автору о том, что

- синтаксис запроса для обновление выглядит как UPDATE news SET title=:title, text=:text WHERE id=:id'
- даже если нам нужно было бы првоерять существование ид в базе, для этого не нужно выбирать ид всех новостей. Достаточно запросить одну запись с интересующим нас ид.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы