
В этой статье мы на примерах разберем такие очень важные моменты в работе с базами данных 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.
Отличная статья, автору респект ))
Спасибо! Рад стараться:)
только на этом сайте по теме так понятно опи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> $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
Здравствуйте, хороший у вас сайт. Функция 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>";
}
?>
Всем спасибо=) разобрался сам=)
Роман, может напишешь ка разорался, у меня тоже такая проблема.
последнее будет работать НО не покажет удалилось что то или нет (или вообще хоть что то удалилось) ибо будет возвращаться не результат удаления а результат выполнения функции, то есть выполнилась функция удачно или нет.
if (mysqli_query ("DELETE FROM first_table WHERE id='$id'"))
{
echo "Запрос выполнился успешно";
}
else
{
echo "Запрос выполнился некорректно";
}
uzer, это всего лишь пример, а не руководство к действию:) В любом случае спасибо за комментарий!
Спасибо, нашел для себя много нового, так как только начинаю изучать PHP :)
Рома, рад что Вам пригодилось:) Успехов в изучении PHP и MySQL:)
Спасибо за статтю, все четко и ясно! Для начала изучения MySQL вполне достаточно.
Статья супер! Все написано и показано без лишней воды на реальном коде. Еще не помешало бы сюда описание и примеры оператора JOIN включить.
Спасибо за статью.
Долго искал ответы на свои вопросы. Что нашёл, что сам додумал, а у Вас всё очень доступно. Нашёл бы раньше, не потерял бы столько времени.
Спасибо.
Спасибо всем за положительные отзывы!
Здравствуйте. Хотелось бы узнать , подключаться к бд вот этим кодом —
1 $db = mysql_connect('Сервер MySQL','Пользователь БД','Пароль для доступа');
2 mysql_select_db('db_name', $db);
нужно именно в том месте где пишешь дальнейший запрос к б д или можно вообще подключить сайт к бд и все? Прописывать пароль от бд прямо на странице безопасно?
Здравствуйте, Владимир. Обычно код подключения к БД выносят в отдельный файл, а затем подключают его там, где это необходимо. Что касается безопасности, то php выполняется на стороне сервера, поэтому получить данные извне не удастся.
Спасибо большое! очень помог ваш сайт)
Всегда рад помочь.
большое спасибо автору, наконец то с выводом из базы на страницу уменя все получилось на 5 с+ продолжайте в том же духе, ждем от вас новых актуальных уроков ++
Спасибо большое!! Уважение людям, излагающим интересную информацию в доступной форме.