Из этой статьи вы узнаете, как с помощью PHP PDO выполнять запрос к базе данных MySQL . А также как использовать подготовленный оператор PDO для безопасного извлечения данных.

PHP-запрос данных MySQL с помощью простого оператора SELECT

Чтобы запросить данные из базы данных MySQL , выполните следующие действия:

Сначала подключитесь к базе данных MySQL .

Затем создайте оператор SELECT и выполните его с помощью метода объекта PDO query() .

Метод объекта PDO query() возвращает объект PDOStatement или false при ошибке.

Затем с помощью метода setFetchMode() установите режим выборки PDO::FETCH_ASSOC для объекта PDOStatement . Режим PDO::FETCH_ASSOC указывает методу fetch() возвращать набор результатов как массив, проиндексированный по имени столбца с помощью PHP PDO MySQL .

После этого, используя метод fetch() объекта PDOStatement извлеките каждую строку из набора результатов, пока не останется ни одной строки.

Весь код PHP PDO примера будет выглядеть следующим образом:

Запрос данных PHP MySQL с использованием подготовленного оператора PDO

На практике часто нужно передать из кода значение в PHP PDO query . Например, чтобы получить данные сотрудников, фамилия которых заканчивается на son . Чтобы сделать это безопасно, нужно использовать подготовленный оператор PDO :

Вот, как работает этот скрипт.

  • Мы используем в операторе SELECT вопросительный знак (?) . PDO заменит вопросительный знак в запросе соответствующим аргументом. Вопросительный знак называется позиционным заполнителем;
  • Затем вызываем метод объекта PDO prepare() , чтобы подготовить оператор SQL к выполнению;
  • Далее выполняем запрос PHP PDO , вызывая метод объекта PDOStatement — execute() . Кроме этого мы передаем аргумент в виде массива, чтобы заменить позиционный заполнитель в SELECT . После этого SELECT будет переведен в следующий вид:
  • Устанавливаем режим извлечения для объекта PDOStatement ;
  • Получаем результаты выборки и отображаем поле фамилии.

PHP предоставляет еще один способ использования заполнителей в подготовленном операторе, который называется именованный заполнитель. Преимущества использования именованного заполнителя:

  • Имеет более описательный характер;
  • Если в операторе SQL имеется несколько заполнителей, то так проще передать аргументы методу execute() .

Рассмотрим следующий PHP PDO пример:

:lname и :fname — это именованные заполнители. Они заменяются соответствующими аргументами в ассоциативном массиве, который мы передаем методу execute .

Из этой статьи вы узнали, как выполнять запросы к базе данных с помощью PHP PDO MySQL .

Данная публикация представляет собой перевод статьи « PHP MySQL: Querying Data from Database » , подготовленной дружной командой проекта Интернет-технологии.ру

В данной статье мы рассмотрим способы обращения к таблицам баз данный MySQL с помощью языка запросов SQL. SQL — это аббревиатура, которая так и "раскрывается" — структуризированный язык запросов.
В языке PHP для это цели существует целый ряд функций с префиксом "mysql". Нам для рассмотрения запросов понадобится не так много из них. Функция, без которой в языке PHP выполнение SQL-запросов было бы просто невозможным:

Данная функция посылает запрос к базе данных и возвращает в случае успешного обращения идентификатор ресурса.
Для того чтобы подключиться к базе данных MySQL необходимо выполнить следующую последовательность:

Итак mysql_connect() — функция для подключения к серверу MySQL на Вашем хостинге.
А mysql_select_db() выбирает базу данных на сервере для подключения.
Иными словами подключаемся к серверу, выбираем базу и начинаем работать.
Функция die() вызывается в случае ошибки и выводит в окно браузера сообщение, которое вы указали.
Для завершения работы с базами данных используется функция:

Здесь $dbh — дескриптор, которые при соединении возвратила функция mysql_connect.
Закончив стартовый обзор, начнем рассмотрение собственно SQL-запросов.
Для этого прежде всего вам необходимо создать базу данных с определенном именем. А в ней создать таблицу, тоже с конкретным именем. В наших примерах будем обращаться к таблице my_sql_table. Чтобы создать эту таблицу давайте выполним в phpmyadmin нашего localhost следующий запрос:

Итак таблица создана. Выполним первый запрос, который сразу оформим в виде PHP-кода:

Разберем PHP-код файла firstsql.php. Начнем с собственно запроса к таблицам базы данных (БД).

Данный запрос можно расшифровать так: выбрать из таблицы my_sql_table БД все записи из всех полей. Таким образом знак * после слова SELECT означает "выбрать абсолютно все". Итак, запрос сформирован. Теперь его надо выполнить:

В случае успешного выполнения запроса функция mysql_query() вернет нам идентификатор ресурса $res.
Его мы должны передать в качестве параметра в функцию mysql_fetch_array(). Название этой функции говорит само за себя. Т.е. она формирует и выдает массив по выборке из таблицы БД. В случае нашей таблицы массив будет состоять из числа элементов, равных количествам записей (строк) в таблице и содержать значения id, firstname, surname для каждой строки таблицы. Следовательно, следующий код:

можно прокомментировать так: пока введенная нами переменная $row получает не нулевые результаты работы функции mysql_fetch_row следует выдать в броузер значение полей $row[‘id’], $row[‘firstname’], $row[‘surname’] с помощью echo.
Если запрос выполнить так:

то это будет означать, что из всех строк выбирается только значения поля firstname.
Следовательно предыдущий код следует переписать как:

Если Вы хотите выбрать строки таблицы с конкретным значением id где фамилия (surname) будет Петров, то запрос перепишется следующим образом:

А вот если потребуется узнать фамилию того, кто находится под номером, к примеру, 5, то запрос будет таким:

В этом случае Вы знаете, что результатом запроса будет всего одна строка из таблицы. Т.е. нет смысла организовывать цикл с использованием while. И обработка запроса будет следующей

Здесь вместо mysql_fetch_array() мы применили mysql_fetch_row(). Т.е. получить значение поля (или полей) конкретной строки. Поскольку поле у нас было одно — surname — мы можем обратиться к единственному элементу массива $row как $row[0];.

Далее мы не будем столь подробно останавливаться на обработке запросов, а будем рассматривать наиболее типичные примеры собственно запросов.

Итак, рассмотрим наиболее типичные примеры запросов MySQL. Рассмотрение проведем на базе таблицы my_sql_table:
1. Добавим в таблицу my_sql_table поле middle_name (отчество) после surname:

2. Теперь удалим поле surname из таблицы my_sql_table:

3. Удаляем записи из таблицы my_sql_table с фамилией Сидоров :

4. Помимо знаков равенства, также "больше" или "меньше", в языке MySQL запросов существует понятие "похоже на". Выберем записи из таблицы my_sql_table, где в фамилии встречается "дор" :

Здесь наличие "%" в начале и конце ‘дор’ и означает, что запрос будет искать именно ‘дор’, причем не важно в начале, конце, или середине фамилии он находится. Рассмотрим следующий пример
5. Выберем записи из таблицы my_sql_table с фамилией, которая начинается на П. Обратите внимание на расположение "%":

6. Вычислим максимальное значение id:

7. Вычислим количество полей в my_sql_table с фамилией, которая начинается на П.

8. Удаление таблицы my_sql_table:

Для запросов 1-3 на языке PHP достаточно просто выполнить запрос:

Мы рассмотрели наиболее характерные примеры запросов. Полагаю, с их помощью, следуя элементарной логике, Вы сможете выполнять более сложные запросы к созданным Вами таблицам баз данных MySQL.

Учебник PHP

Практика

Важное

Регулярки

Работа с htaccess

Файлы, папки

Сессии и куки

Работа с БД

Практика по работе с БД в PHP

Перед чтением см. новые уроки раздела "Важное", которые появились выше.

Практика

Движок PHP

Продвинутые БД

Аутентификация

Практика

ООП и MVC

Абстрактные классы и интерфейсы

Трейты

ООП Магия

Практика

Практика: классы как набор методов

  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс ArrayConvertor
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс TagHelper
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс FormHelper
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс TableHelper
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс SessionShell
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс CookieShell
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс FileManipulator
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс databaseShell TODO cart корзина flash шаблонизатор роутер контроллер кеш логи фалидатор

Что такое база данных

База данных (сокращенно БД) — это место, в котором хранятся данные сайта.

Это могут быть тексты страниц, списки пользователей с их логинами и паролями, каталоги продукции и другое.

База данных состоит из таблиц. Что такое таблица вы знаете из жизни: это строки и столбцы. А на пересечении строк и столбцов располагаются ячейки.

В базах данных столбцы часто называют полями.

Это легко можно вообразить себе, представив документ Excel. Базой данных будет являться сам документ (книга), а таблицами — каждый лист этой книги.

PhpMyAdmin

Для редактирования баз данных часто пользуются программой PhpMyAdmin.

PhpMyAdmin (читается PHPмайадмин, часто пишут аббревиатуру PMA или ПМА) — это оболочка для работы с базами данных прямо у вас в браузере.

Вы можете править содержимое таблиц, создавать новые базы данных и таблицы — и все это через веб-интерфейс, не зная SQL.

Видео на PhpMyAdmin

Задачи на PhpMyAdmin

Давайте откроем PhpMyAdmin и приступим к изучению его интерфейса.

Чтобы вам было проще с ним освоится, сделайте следующие практические задачи:

  1. Создайте базу данных test.
  2. В ней создайте таблицу users.
  3. В этой таблице сделайте 4 поля (столбца):
    • id (для него нужно поставить галочку AUTO_INCREMENT или A.I.), тип integer,
    • name, тип varchar, 32 символа,
    • age, тип integer,
    • birthday (англ. день рождения), тип date.
    • Найдите вкладку ‘вставить’ и с ее помощью вставьте несколько строк в эту таблицу При этом поле id заполнять не нужно! Оно заполнится автоматически!
    • Поредактируйте какую-нибудь запись.
    • Удалите какую-нибудь запись.
    • Поменяйте кодировку для таблицы и для всей базы данных (на utf8_general_ci).
    • Переименуйте таблицу.
    • Переименуйте базу данных.

    AUTO_INCREMENT

    Обратите внимание на то, что мы создали поле id и поставили ему галочку AUTO_INCREMENT. Это очень важный шаг!

    Теперь при вставке новой записи (строки) в таблицу это поле будет заполняться автоматически уникальным номером.

    При этом если мы удалим строку с каким-то id (например 1), то такого id больше никогда не будет.

    Зачем нужно поле id?

    Затем, чтобы мы всегда могли обратиться к конкретной строке по ее id, например с целью удаления или редактирования.

    Типы переменных

    В SQL довольно много типов переменных, но чаще всего приходится пользоваться следующими:

    • integer – целочисленный.
    • text – большое текстовое поле.
    • varchar – не очень большое текстовое поле, при этом мы должны задать его размер (он должен быть степенью двойки: 8, 16, 32, 64, 128, 256 и т.д.).
    • date — поле для хранения даты (дата хранится в SQL-формате: год-месяц-день, пример: 2013-06-24).

    Как работать с mySQL через PHP

    Работа с БД из PHP осуществляется всего лишь с помощью трех функций:

    • mysqli_connect – соединение с сервером и базой данных.
    • mysqli_query — универсальная функция отправки запросов к БД, с помощью нее можно сделать все.
    • mysqli_error — вывод ошибок.

    Далее подробнее про каждую из функций.

    Устанавливаем соединение с БД

    Данный материал есть также в виде видео: https://youtu.be/J8GFuyA_k_8

    Прежде, чем начать работать с базой данных из PHP, нужно установить соединение с сервером, на котором эта база находится.

    Делается это с помощью функции PHP mysql_connect, которая принимает 3 параметра: имя хоста (сервера), имя пользователя, под которым мы работаем с базой и пароль для этого пользователя.

    Если вы работаете на своем компьютере то это будут ‘localhost’, ‘root’ и пароль в виде пустой строки (на некоторых серверах он тоже может быть root). Если ваша база данных в интернете — то эти данные дает вам хостер.

    Давайте установим соединение с базой данных:

    Посылаем запросы к базе данных

    Запросы к базе данных представляют собой обычные строки, которые мы вставляем в функцию PHP mysqli_query (первым параметром это функция принимает переменную, в которую мы записали результат mysqli_connect, в нашем случае это переменная $link):

    Принято правило, по которому команды SQL следует писать в верхнем регистре (то есть большими буквами), а все остальное — в нижнем.

    Это относиться к командам SELECT, UPDATE, FROM, DELETE, WHERE и другим такого рода.

    Конечно, синтаксической ошибки не будет, если вы напишите их маленькими буквами, но принято большими.

    Отлавливаем ошибки базы данных

    Многие начинающие зачастую не умеют отлавливать ошибки, которые вернула база данных.

    Поэтому при работе с БД у них постоянно возникают сложности. Что-то не работает, а что — не понятно, так как ошибок они не видят, так как PHP не выводит ошибки mySQL, если ему об этом не сказать

    Чтобы вывести ошибки, следует пользоваться конструкцией or die ( mysqli_error($link) ), которую необходимо добавлять к каждому запросу к БД.

    Смотрите пример: mysqli_query($link, $query) or die( mysqli_error($link) );

    Таким образом вы сразу будете получать сообщения об ошибках синтаксиса SQL. Обратите внимание на то, что на рабочем сайте эти конструкции следует удалять, чтобы пользователи и тем более хакеры не видели ошибок БД.

    Проблемы с кодировками

    Зачастую у новичков возникает проблема с кодировками — казалось бы нормальный русский текст в базу данных записывается абракадаброй или вопросиками.

    Чтобы не было проблем с кодировками следует придерживаться простых правил:

    • Базу данных следует создавать в кодировке utf8_general_ci.
    • Документ PHP должен быть в кодировке utf8.
    • Таблицы в БД должны быть в utf8_general_ci.
    • На всякий случай сразу после команды mysqli_connect добавьте такое запрос: mysqli_query($link, "SET NAMES ‘utf8’");

    Начнем практиковаться

    Сейчас мы с вами начнем изучить SQL запросы на практике. Для этого нам понадобится тестовая таблица в базе данных, заполненная некоторыми данными. Сейчас мы с вами ее сделаем и заполним.

    Итак, создайте свою первую базу данных с помощью PhpMyAdmin.

    Назовите ее "test".

    Создайте в этой базе новую таблицу.

    Назовите ее "workers" (англ. работники).

    В ней создайте 4 столбца (столбцы по другому называются поля):

    • id – тип integer, не забудьте поставить ему галочку AUTO_INCREMENT (чтобы в этом столбце номера проставлялись автоматически).
    • name (англ. имя) – тип varchar, размером в 256 знаков.
    • age (англ. возраст) — тип integer.
    • salary (англ. зарплата) — тип integer.

    Ее заполните тестовыми данными, как показано в таблице ниже (этот шаг обязателен, так как дальше все задачи будут по этой таблице):

    idnameagesalary
    1Дима23400
    2Петя25500
    3Вася23500
    4Коля301000
    5Иван27500
    6Кирилл281000

    Итак, у нас есть таблица с работниками фирмы, в которой указаны их имена, возрасты и зарплаты (в $). Далее мы будем работать с этой таблицей.

    Тестируем работоспособность

    Прежде чем начать работу, следует протестировать работоспособность — попробуем сделать какой-нибудь запрос к нашей базе.

    Просто скопируйте этот код и запустите его у себя:

    Если var_dump($result) вернет resource, то все работает, если же null – то возникли какие-то проблемы. в новых версиях PHP в $result будет лежать объект с данными (всегда будет непустой). Если обработать его через mysqli_fetch_assoc будет или результат или null (про mysqli_fetch_assoc см ниже или видео https://youtu.be/J8GFuyA_k_8 , которое уже было выше в пункте "Устанавливаем соединение")

    В таком случае проверьте все еще раз, уберите последовательно все ошибки PHP, если таковые есть.

    Как достать результат

    После того, как мы сделали запрос к базе, в переменной $result будет лежать результат этого действия.

    Однако лежит он не в той форме, которая нам нужна в PHP, а в той форме, в которой его прислала нам база.

    Достать результат в нормальном виде (в массиве) можно с помощью следующего кода:

    Как работает последняя строка?

    Функция mysqli_fetch_assoc считывает последовательно каждую строку результата, который прислала нам база.

    В цикле for мы считываем построчно результат из базы.

    Когда цикл дойдет до последней строки — mysqli_fetch_assoc вернет false и цикл for закончит свою работу.

    А результат из БД будет лежать в нормальном виде в массиве $data.