Основы PHP и MySQL — Операторы выборки (SELECT), вставки (INSERT), обновления (UPDATE) и удаления (DELETE) информации из базы данных

Logo
Основы PHP и MySQL - Операторы выборки (SELECT), вставки (INSERT), обновления (UPDATE) и удаления (DELETE) информации из базы данных

В этой статье мы на примерах разберем такие очень важные моменты в работе с базами данных MySQL (БД), как выборка из базы данных, запись в базу данных, обновление информации в базе данных, а также ее удаление из базы данных. Все это будет производиться при помощи четырех операторов PHP – операторов SELECT, INSERT, UPDATE и DELETE о которых и пойдет речь в данной статье.

В предыдущей статье про основы работы с базами данных мы рассмотрели, как создавать базы данных через phpMyAdmin и заносить в них информацию, а также как подключаться к БД через PHP. Теперь давайте перейдем к следующему этапу в изучении PHP и MySQL и рассмотрим, как вытащить информацию из базы данных при помощи PHP или другими словами сделать выборку из БД.

Как сделать выборку из базы данных. Оператор выборки SELECT

Перед тем как производить выборку из базы данных, первым делом нужно подключиться к MySQL серверу и выбрать базу данных для работы. Как вы уже знаете из предыдущей статьи рубрики «Уроки PHP и MySQL», делается это следующим образом.

$db = mysql_connect('Сервер MySQL','Пользователь БД','Пароль для доступа к БД');
mysql_select_db('db_name', $db);

После соединения с MySQL сервером и выбора базы данных можно приступить непосредственно к выборке из БД. Для примера возьмем базу данных, которую мы создавали в предыдущей статье. Напомню, что была создана база данных с именем db_name и одной таблицей first_table, в которой было всего три поля: id (идентификатор), name (имя), last_name (фамилия). Для того чтобы произвести выборку из базы данных можно использовать функцию mysql_query(), которая в данном случае имеет следующий синтаксис.

mysql_query("SELECT поля FROM таблица WHERE условие",$db);

где, $db – идентификатор подключения.

Если говорить простыми словами, то данный код расшифровывается как «ВЫБРАТЬ поля (перечисляем названия через запятую) ИЗ таблицы (указываем имя таблицы БД) ГДЕ выполняется условие (прописываем условие)». Как видите синтаксис функции очень простой, а сам код похож на обычный человеческий язык.

Поскольку функция mysql_query() возвращают результат, то его нужно поместить в какую-то переменную для дальнейшего использования, например, в переменную $result.

$result = mysql_query("SELECT поля FROM таблица WHERE условие",$db);

Теперь результат выполнения функции mysql_query() хранится в переменной $result и может быть использован, например, для формирования массива и вывода результатов на экран. Более подробно об этом мы поговорим чуть позже, ну а пока перейдем к примерам. В качестве базы данных для примера будем использовать базу db_name из предыдущей статьи.

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

$result = mysql_query("SELECT * FROM first_table",$db);

Звездочка означает, что нужно вытащить все поля из таблицы.

Если нужно вытащить только некоторые поля, например, имя и фамилию.

$result = mysql_query("SELECT name, last_name FROM first_table",$db);

name, last_name – поля с именами и фамилиями пользователей.

Если нужно получить точные данные, например, фамилию всех пользователей в базе данных с определенным именем (имя будет занесено в переменную $name).

$result = mysql_query("SELECT last_name FROM first_table WHERE name='$name'",$db);

name=’$name’ – поле name равняется переменной $name.

Кроме одного условия мы также можем перечислить несколько, например, нужно получить идентификатор всех пользователей с определенным именем и фамилией (имя и фамилия будут занесены в переменные $name и $last_name соответственно). Для этого можем использовать следующий код.

$result = mysql_query("SELECT id FROM first_table WHERE name='$name' AND last_name='$last_name' ",$db);

Если же нам нужно получить записи, где выполняется одно условие из нескольких, например, получить идентификаторы всех пользователей у которых имя или фамилия отвечают заданным в условиях.

$result = mysql_query("SELECT id FROM first_table WHERE name='$name' OR last_name='$last_name' ",$db);

Если вам нужно отсортировать результат по каким-то параметрам, например, по имени.

$result = mysql_query("SELECT * FROM first_table ORDER BY name ",$db);

ORDER BY name – отсортировать по имени.

Если нужно отсортировать в обратном порядке.

$result = mysql_query("SELECT * FROM first_table ORDER BY name DESC ",$db);

DESC – в обратном порядке.

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

$result = mysql_query("SELECT * FROM first_table ORDER BY id LIMIT 5 ",$db);

LIMIT 5 – вытащить из БД только первые пять результатов.

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

Результат выполнения функции мы можем поместить в переменную, например, переменную $myrow, которая будет хранить в себе ассоциативный массив. В качестве параметра функции mysql_fetch_array() будет передан результат выполнения функции mysql_query(). Все это будет выглядеть следующим образом.

$myrow = mysql_fetch_array($result);

Теперь мы можем обращаться к элементам ассоциативного массива $myrow. В качестве примера давайте рассмотрим код, который выводит на экран имя пользователя с идентификатором id =1. В качестве базы данных будет использоваться база db_first из предыдущей статьи.

/*Подключаемся к БД*/
$db = mysql_connect('Сервер MySQL','Пользователь БД','Пароль для доступа к БД');
mysql_select_db('db_name', $db);
/*Делаем запрос к БД*/
$result = mysql_query("SELECT name FROM first_table WHERE id='$id'",$db);
/*Преобразовываем результат в массив*/
$myrow = mysql_fetch_array($result);
/*Выводим результат на экран*/
echo $myrow['name'];

Как видите все очень просто и понятно.

Ну а теперь перейдем к следующему оператору INSERT, который отвечает за добавление информации в базу данных.

Добавление информации в базу данных. Оператор INSERT

Оператор INSERT применяется для добавления информации в базу данных. Код, отвечающий за добавление, имеет следующий синтаксис.

$result = mysql_query ("INSERT INTO таблица (поле 1, поле 2, поле N) VALUES ('значение 1', 'значение 2', 'значение N')");

Данный код можно было бы прочитать как «ВСТАВИТЬ В таблицу (имя таблицы) в поля (названия полей через запятую) ЗНАЧЕНИЯ (перечисляем значения через запятую)».

Например, нам нужно добавить в таблицу first_table имя и фамилию нового пользователя. Для этого можно использовать следующий код.

$result = mysql_query ("INSERT INTO first_table (name, last_name) VALUES ('$name', '$last_name')");

Где, $name и $last_name – переменные с именем и фамилией нового пользователя.

Для того чтобы проверить результат можно использовать конструкцию if – else.

$result = mysql_query ("INSERT INTO first_table (name, last_name) VALUES ('$name', '$last_name')");
if ($result == 'true')
{
echo "Запись добавлена успешно!";
}
else
{
echo "Запись не добавлена!";
}

Другими словами, если в переменную $result попадет истина, то выведется сообщение, что запись добавлена. В противном случае выведется, что запись в базу данных не добавлена.

Обновление информации в базе данных. Оператор UPDATE

Оператор UPDATE применяется для обновления уже существующей информации в базе данных. Синтаксис функции mysql_query в данном случае следующий.

$result = mysql_query ("UPDATE таблица SET поле 1='значение 1', поле 2='значение 2' WHERE условие");

Теперь перейдем к примеру. Допустим нам нужно изменить имя и фамилию для пользователя с идентификатором $id в таблице db_name. Для этого можно использовать следующий код.

$result = mysql_query ("UPDATE first_table SET name='$name', last_name='$last_name' WHERE id='$id'");
if ($result == 'true')
{
echo "Данные успешно обновлены.";
}
else
{
echo "Данные не обновлены!";
}

Теперь давайте перейдем к заключительной части статьи и рассмотрим последний оператор DELETE, который отвечает за удаление информации из базы данных.

Удаление информации из базы данных. Оператор DELETE

Оператор DELETE применяется для удаления полей из базы данных. Синтаксис функции mysql_query() в данном случае следующий.

$result = mysql_query ("DELETE FROM таблица WHERE условие");

Теперь как обычно перейдем к примеру. Допустим нам нужно удалить пользователя с идентификатором $id из таблицы db_name. Для этого можно использовать следующий код.

$result = mysql_query ("DELETE FROM first_table WHERE id='$id'");
if ($result == 'true')
{
echo "Данные удалены успешно!";
}
else
{
echo "Данные не удалены!";
}

На этом данная статья подошла к концу. Материал не сложный, но объяснять его посредством текста достаточно сложно. Все же я думаю, вы поняли всю суть вышеизложенного материала. Если у вас остались какие-то вопросы по данной статье, вы всегда можете задать их в комментариях.

На этом все. Удачи вам и успехов в изучении PHP и MySQL.

Обнаружили ошибку? Выделите ее и нажмите Ctrl+Enter

Комментарии 33

  • Алекс

    Отличная статья, автору респект ))

  • Дмитрий

    Спасибо! Рад стараться:)

  • alla

    только на этом сайте по теме так понятно опиcан материал. thank’s

  • Дмитрий

    Спасибо! Краткость и понятность — мое второе я.

  • Костя

    У меня возникли проблемы с кириллицей, отображаются знаки вопроса.
    php-файл в кодировке utf8.
    При создании таблица в phpmyadmin, если оставить поле "Сравнение" пустым, то по умолчанию выбирается кодировка latin1_swedish_ci (шведская регистронезависимая), изменяю на utf8_unicode_ci (юникод регистронезависимый), ничего не меняется.
    латиница нормально отображается.

  • Дмитрий

    Если кодировка файлов, базы данных и таблиц баз данных правильная, но информация по прежнему записывается в БД не в той кодировке, попробуйте задать кодировку подключения. Для этого добавьте следующий код в php-файл сразу после подключения к БД:
    mysql_set_charset("utf8");

  • Денис

    здравствуйте! как сделать, чтобы в значении ID присутствовал checkbox? требуется для того, чтобы пользователь отметил нужную запись и нажав на кнопку, мог её обновить или удалить. вот код:
    //Отображаем таблицу пользователей
    $database="Auth";
    $table_name="Users";
    mysql_select_db($database);
    $list_f = mysql_list_fields($database, $table_name);
    $n1 = mysql_num_fields($list_f);

    //Сохраним имена полей в массиве $names
    for($j=0;$j<$n1; $j++)
    {
    $names[] = mysql_field_name ($list_f,$j);
    }

    //Создаем SQL запрос
    $sql = "select * from $table_name";

    //Отправляем запрос на сервер
    $q = mysql_query($sql, $db);

    //Получаем число строк результата
    $n = mysql_num_rows($q);

    //Рисуем HTML-таблицу
    echo <<<EOT
    <h2> Таблица $table_name</h2>
    <table cellpadding=0 width=90% align=center>
    EOT;

    //Отображаем названия полей
    echo "<tr>\n";
    foreach($names as $val)
    echo "<th align=center
    bgcolor='#FFF1DF' text='#996600'>
    <font face='Arial, Helvetica, sans-serif' size=4>$val</font></th>\n";
    echo "</tr>\n";

    //Отображаем значения полей
    for($i = 0;$i < $n; $i++)
    {
    //Получаем значение строк в виде ассоциативного массива
    while($row = mysql_fetch_array($q, MYSQL_ASSOC))
    {
    echo "<tr>\n";

    //Выводим значение полей
    foreach ($names as $k => $val)
    echo "<td><font face='Arial, Helvetica, sans-serif' size=4>&nbsp;$row[$val]</font></td>\n";
    echo "</tr>\n";
    }
    }
    echo '</table>

  • Дмитрий

    Как много всего написано:) В комментариях отключен хтмл, поэтому все будет в одну строку, но, думаю, разберетесь. Итак, вывод формы (в цикле): printf ("<input class='checkbox' name='id[]' type='checkbox' value='%s' id='item_%s' /><label for='item_%s'>Выбрать</label><div class='name'>Имя — <input type='text' value='%s' /></div>",$string["id"],$string["id"],$string["id"],$string['name']); В обработчике нам нужно будет получить идентификаторы и сформировать из них строку. То есть, занести в переменную список ID через запятую. Сделать это можно следующим образом: $query = "("; foreach($ids as $id) { $query = $query.$id.","; } $query = substr($query, 0, strlen($query) — 1 ).")"; После этого можно уже создавать запрос к базе данных вида: mysql_query("SELECT name FROM items WHERE id IN ".$query); Вот и все.

  • Юрий

    Дмитрий спасибо большое за статью. Для меня это очень актуально, т.к. в данный момент разбираюсь с БД и PHP. У вас все написано конкретно и доходчиво. А везде столько воды. Успехов Вам, и ждем новых статей!  Буду всем рекомендовать Ваш материал.

  • Дмитрий

    Юрий, спасибо за комментарий. Рад, что Вам все понравилось. По свободе буду еще стараться написать что-то по PHP и MySQL.

  • Костя

    Отличная статья, спасибо!
    Но возникла проблемка с mysql_fetch_array. Денвер выдает такую ошибку: Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in Z:\home\online\www\index.php on line 4(фетч эррей у меня в четвертой строке) в чем дело?

  • Дмитрий

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

  • Илья

    Знающие люди помогите, вот у я делаю тв программу на своем сайте, скажите есть ли функция которая выводит данные из базы данных, которые соответствуют реальному времени, например если сегодня вторник то из базы данный вытащится информация на вторник или это мои фантазии?

  • Илья

    Здравствуйте обитатели сайта!

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

  • Дмитрий

    Здравствуйте, Илья! Извините за задержку с ответом. Сейчас в отъезде, поэтому часто нет возможности зайти на блог и опубликовать комментарии. Что касается Вашего вопроса, то для решения можете попробовать сделать следующее. Занесите дату в переменную при помощи функции date(), передав ей нужные параметры, и используйте ее в запросе к базе данных. Подробнее о функции date() Вы можете найти в этой статье — dmitriydenisov.com/php-mysql/funkcii-vstroennye-v-php.html

  • Sergius

    Здравствуйте, хороший у вас сайт. Функция mysql_fetch_array() возвращает два массива, ассоциативный и нумерованный, а используется лишь один. Для этого подойдет функция mysql_fetch_assoc()
    $myrow = mysql_fetch_assoc($result);

  • Дмитрий

    Здравствуйте, Sergius. Спасибо за отзыв. Поскольку функции аналогичны, то в примерах была использована та, которая чаще всего используется и является наиболее предпочтительной в большинстве случаев.

  • Роман

    Всем здрасте! Помогите пожалуйста! Использовал код обновления, но вот что то информация в базе не как не обновляется=( Подскажите причину!

    <?php
    if (isset ($title) && isset ($meta_d) && isset ($meta_k) && isset ($date) && isset ($discript) && isset ($text) && isset ($author))
    {
    $result=mysql_query("UPDATE blogs SET title='$title', meta_d='$meta_d', meta_k='$meta_k', discript='$discript', date='$date', text='$text', author='$author' WHERE id='$id'");
    if ($result == "true") {echo "<p>Блог успешно обнавлен</p>";}
    else {echo "<p>Блог не обнавлен</p>";}
    }
    else {
    echo "<p>Вы ввели не всю информацию</p>";
    }
    ?>

  • Роман

    Всем спасибо=) разобрался сам=)

  • uzer

    последнее будет работать НО не покажет удалилось что то или нет (или вообще хоть  что то удалилось) ибо будет возвращаться не результат удаления а результат выполнения функции, то есть выполнилась функция удачно или нет.

    if (mysqli_query ("DELETE FROM first_table WHERE id='$id'"))

    echo "Запрос выполнился успешно";
    }
    else
    {
    echo "Запрос выполнился некорректно";
    }

  • Дмитрий

    uzer, это всего лишь пример, а не руководство к действию:) В любом случае спасибо за комментарий!

  • Рома

    Спасибо, нашел для себя много нового, так как только начинаю изучать PHP  :)

  • Дмитрий

    Рома, рад что Вам пригодилось:) Успехов в изучении PHP и MySQL:)

  • Tolik

    Спасибо за статтю, все четко и ясно! Для начала изучения MySQL вполне достаточно.

  • Владимир

    Статья супер! Все написано и показано без лишней воды на реальном коде. Еще не помешало бы сюда описание и примеры оператора JOIN включить.

  • Валерий

    Спасибо за статью.
    Долго искал ответы на свои вопросы. Что нашёл, что сам додумал, а у Вас всё очень доступно. Нашёл бы раньше, не потерял бы столько времени.
    Спасибо.

  • Дмитрий

    Спасибо всем за положительные отзывы!

  • Владимир

    Здравствуйте. Хотелось бы узнать , подключаться к бд вот этим кодом —
    1 $db = mysql_connect('Сервер MySQL','Пользователь БД','Пароль для доступа');
    2 mysql_select_db('db_name', $db);
    нужно именно в том месте где пишешь дальнейший запрос к б д или можно вообще подключить сайт к бд и все? Прописывать пароль от бд прямо на странице безопасно?

  • Дмитрий

    Здравствуйте, Владимир. Обычно код подключения к БД выносят в отдельный файл, а затем подключают его там, где это необходимо. Что касается безопасности, то php выполняется на стороне сервера, поэтому получить данные извне не удастся.

  • serheo

    Спасибо большое! очень помог ваш сайт)

  • Дмитрий

    Всегда рад помочь.

  • александр

    большое спасибо автору, наконец то с выводом из базы на страницу уменя все получилось на 5 с+ продолжайте в том же духе, ждем от вас новых актуальных уроков ++

  • Федор

    Спасибо большое!! Уважение людям, излагающим интересную информацию в доступной форме.

Оставить комментарий

отменить ответ