TOC

This article has been localized into Russian by the community.

PHP и MySQL:

Получение данных

В предыдущем параграфе мы установили соединение со своей базой данных MySQL, так что теперь пришло время сделать что-нибудь интересное с этим соединением. Как упоминалось во введении, мы взаимодействуем с сервером MySQL путем отправки SQL-кода через PHP-функцию, точнее - через функцию mysql_query().

Чтобы получить данные через SQL используется оператор SELECT. У него есть много вариаций, но самая простая форма обычно выглядит следующим образом:

SELECT column_name FROM table_name

Этот запрос выбирает данные из столбца с именем "column_name" в таблице с именем "table_name" и возвращает все строки из нее. Во введении мы вставили несколько строк данных в таблицу test_users, где у нас были столбцы id, name и country. Запрос для получения этих данных может выглядеть следующим образом:

SELECT id, name, country FROM test_users

Это был код SQL, который нужен для получения наших данных. Теперь пусть PHP выполнит его для нас с помощью функции mysql_query():

mysql_connect("localhost", "username", "password");
mysql_select_db("my_database");
$query = mysql_query("SELECT id, name, country FROM test_users");

Функция mysql_query() просто отправляет SQL-запрос на сервер MySQL и затем возвращает ссылку на результат. В дальнейшем мы будем использовать множество разных функций PHP, чтобы правильно использовать этот результат. К примеру, мы можем посмотреть, сколько строк вернулось в результате с помощью функции mysql_num_rows() (соединение уже должно быть установлено, как мы видели ранее):

$query = mysql_query("SELECT id, name, country FROM test_users");
echo "The table currently contains " . mysql_num_rows($query) . " row(s)";

Разумеется, если мы всего лишь хотим узнать число строк, есть и более эффективные способы, которые не требуют получения всех трех строк. Вместо того, чтобы просто получить число строк, давайте попробуем вывести какие-нибудь данные:

$query = mysql_query("SELECT id, name, country FROM test_users");
echo "The first name is: " . mysql_result($query, 0, "name");

Функция mysql_result() может получить отдельный фрагмент данных из результата запроса. В качестве параметров мы определяем ссылку на запрос, номер (индекс) строки и имя столбца, из которого мы хотим получить данные. В данном случае мы получаем результат из переменной $query, мы берем первую возвращенную строку (индекс 0) и извлекаем данные из столбца с заголовком "name". Таким образом, мы получаем первое имя пользователя в таблице и выводим его на экран.

В большинстве случаев требуется вывести все строки данных, которые вы выбрали, изо всех столбцов. Обычно это делают с помощью функции mysql_fetch_array(), которая просто выдает все строку данных в виде массива, перемещая указатель на один шаг вперед, так что при следующем вызове она вернет следующую строку. Это делает цикл отличным выбором, чтобы получить все строки одну за одной. Давайте рассмотрим пример, в котором используется такой подход:

$query = mysql_query("SELECT id, name, country FROM test_users");
while($row = mysql_fetch_array($query))
    echo $row["name"] . " is from " . $row["country"] . "<br />";

Мы используем цикл while, в котором мы на каждой итерации присваиваем результат вызова функции mysql_fetch_array() в переменную $row. Это сработает, благодаря тому, что mysql_fetch_array() вернет FALSE, когда строк больше не останется, и цикл завершится. А пока еще есть необработанные строки, mysql_fetch_array() будет помещать все значения изо всех столбцов в переменную $row, откуда мы можем извлечь их просто по именам из SQL. В нашем примере, это дает нам доступ к id, name и country, но для простоты мы использовали только name и country.

Так выглядит базовый способ получения данных из базы данных. Как вы можете видеть, это довольно просто, поскольку в PHP есть куча полезных функций для этих целей, но у нас есть еще много работы над MySQL и нам определенно нужно еще попрактиковаться в написании SQL-запросов. Продолжайте чтение, чтобы узнать об этом побольше.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!