Большинство из них — ошибки программиста 3
Эта часть в основном посвящена работе с данными из базы данных. Я сосредоточусь на том, что делается ненужно и что можно сделать лучше с меньшим количеством серверов. Примеры требуют хотя бы базовых знаний контроллера объектов PDO и использования базы данных MySQL.
Исследовать только необходимые данные
Данные можно искать в SQL двумя способами — перечислить отдельные столбцы или написать звездочку (которая будет искать все столбцы в таблице). Использовать звездочку очень просто, и вам не нужно много писать, но в большинстве случаев вы также будете искать столбцы, которые вам в конечном итоге не нужны и которые вы не будете использовать.
Простой пример
У нас есть таблица с пользователями, которая содержит столбцы ID, логин, имя, фамилию, дату рождения и дату регистрации. Мы хотим искать всех пользователей и отображать их имя, фамилию и дату регистрации.
Если бы мы использовали звездочки, мы бы написали
Однако этот запрос будет искать во всех 6 столбцах вместо 3, которые нам нужны. Это означает, что будет преобразован ненужный объем данных. Для очень маленьких баз данных это практически не сказалось бы на производительности, но представьте себе базу, где зарегистрировано 10 тысяч человек и около 2 тысяч пользователей одновременно открывали бы страницу с этим запросом. Это будет означать, что на 3 * 10 тыс. * 2 тыс. = 60 млн дополнительных блоков данных будут потрачены впустую (еще 3 столбца, 10 000 записей и 2 000 пользователей на страницу).
На практике мы бы не искали все 10 тысяч записей, а ограничивали бы их различными способами с помощью предложения LIMIT (например, для разбиения на страницы). Но для небольшого примера того, сколько дополнительных данных будет передано, этого достаточно.
Я хочу только перечислить их в вопросестолбцы, которые нам действительно нужны.
Обратные апострофы
Иногда может случиться так, что имя таблицы или столбца будет противоречить ключевому слову базы данных. Например, если бы у нас был столбец с именем text или from, такой запрос был бы неуместен:
Поэтому мы должны сообщить базе данных, чтобы она не использовала имена наших столбцов в качестве ключевых слов. Для этого используются обратные апострофы.
Я лично рекомендую всегда записывать апострофы, даже если имена не конфликтуют. Как минимум, вы избежите риска появления нового ключевого слова в новой версии базы данных, что может привести к конфликту.
Управление записями
База данных содержит множество функций, которые мы можем использовать для получения точного формата списка. Например, если бы мы хотели прочитать значение некоторого столбца во всех записях, мы могли бы сделать это на уровне PHP.
В этом случае, однако, мы запускаем много кода и в то же время извлекаем значение столбца из базы данных и только потом добавляем его. В базе обычно есть функция, которая вычислит его за нас и вернет результат. В MySQL для этого есть функция SUM().
.
Очень похожий случай также относится к количеству записанных записей. Мы можем сделать это на уровне PHP, где мы будем добавлять индивидуально в цикле. Если вы используете старый драйвер mysql_*, вы можете написать что-то вроде этого:
Опять же, мы перетаскиваем данные без необходимости и только после этого считаем строки. Однако в базе данных есть функция COUNT(), которая сразу подсчитает строки.
Имя определенного столбца также можно передать функции COUNT(). В таком случае будут подсчитаны записи, в которых значение данного столбца не равно NULL.
База данных содержит много таких функций. УраЭти функции удобно использовать уже на уровне запросов к базе данных, а не на уровне PHP.
Полученный идентификатор последнего вставленного списка
В некоторых случаях мы хотим получить его идентификатор после вставки новой строки в таблицу. У нас будет таблица с двумя столбцами — ID и имя пользователя. Это можно сделать очень просто:
Этот код сначала вставляет новую запись в таблицу, а затем использует функцию MAX() для выбора максимального числа.
Написано по-другому, но получилось то же самое. Он просто выбирает значение столбца ID, начиная с самого большого и выбирая только первое (используя LIMIT).
Но эти вопросы «совершенно не нужны». Чтобы получить последний вставленный идентификатор, PDO имеет метод lastInsertId().
Просмотренный список
В отличие, например, от старого драйвера mysql_*, PDO может возвращать требуемые записи. Если нам нужно только одно значение, нам не нужно обращаться к нему через какое-то поле или, наоборот, нам не нужно проходить все списки последовательно, строка за строкой, но PDO вернет весь список.
метод fetchAll()
Как следует из названия, метод вернет все найденные записи. Хранится в двумерном массиве в виде:
Благодаря этому массив можно циклически перебирать (обычно с помощью foreach) и работать с отдельными записями.
Если данные не найдены, результатом будет пустое поле.
метод fetch()
Метод fetch() возвращает одномерный массив в соответствии с заданным списком. Используется, если мы ищем одну конкретную запись, например информацию о пользователе.
Если совпадающая строка не найдена, метод возвращает FALSE. Его можно очень легко использовать, чтобы узнать, был ли найден код или нет. ВьюЕѕГтэто происходит, например, с зарегистрированными пользователями.
метод fetchColumn()
Этот метод возвращает значение одного определенного столбца в одном списке. Он часто используется, например, в вычисляемом списке.
Если значение не найдено, метод возвращает FALSE.
Формат выходных данных
Эта часть тесно связана с предыдущей. Помимо отдельной группы данных, мы можем определить, в каком формате она должна быть возвращена. Например, мы можем хранить данные только в ассоциативном поле или в объекте.
Я перечислил только самые используемые стили, есть и другие (см. php.net).
Уникальные значения
Если мы хотим, чтобы в таблице были только уникальные значения, нет необходимости заранее спрашивать, есть ли уже заданное значение. Часто можно увидеть такой код:
Если какая-либо запись существует, вернуть 1, иначе PDO вернет FALSE.
Однако мы можем использовать уникальный ключ непосредственно в таблице. Достаточно добавить «уникальный ключ» в данный столбец, а этого не может произойти, если мы вставляем тот же список. Если мы попытаемся это сделать, база данных вернет ошибку. Этот PDO представляет в соответствии с настройками. Наиболее распространенная настройка заключается в том, что при возникновении ошибки генерируется исключение.
Итак, этот пистолет позади них. Спасибо за прочтение, и если будет интерес, я постараюсь написать больше советов, которые могли бы помочь как новичкам, так и даже немного продвинутым разработчикам.