Помню те времена, когда я еще не знал что такое mysql и часто искал в интернете такие статьи. Но, они почему-то редко находились. Вот теперь решил выложить такую, чтобы полезных статей о mysql и php стало на одну больше. Постараюсь написать все на доступном языке.
начало работы с mysql и php
Итак, для начала нам потребуется локальный сервер, для того чтобы можно было запускать php скрипты и подключаться к базе (дальше буду называть БД, что означает «база данных»). Если у вас еще нет локального сервера, то сначала следует прочитать Установка и настройка localhost , а потом уже приступать к изучению БД mysql и ее СУБД (средство управления базой данных).
Если у вас уже есть этот сервер, то делаем так. Для начала хочу познакомить вас с СУБД PhpMyAdmin , она позволяет управлять (добавлять, удалять, изменять) записями в БД.
Это главная страница СУБД PhpMyAdmin . Отсюда вы можете создать свою БД, и хранить в ней необходимые записи. Это очень удобно при создании сайтов, так как информация структурирована и вы можете очень быстро получить любую запись из БД.
Как уже было сказано, первая часть статьи, знакомство с mysql и phpmyadmin . Думаю теперь вы поняли что такое mysql и мы можем приступать к изучению функционала phpmyadmin. Для начала работы, нам потребуется создать саму БД (базу данных). У нее будет свое имя, по которому мы потом будем ее искать.
Вот общая структура строения базы данных:
Для того чтобы создать БД, впишите в поле ввода под строкой «Создать новую БД» (на главной странице PhpMyAdmin) любое имя (не кириллица!) для будущей базы. Я создам базу данных с именем «baza» . Теперь, следуя схеме строения БД, нам нужно сделать таблицу. Для этого после создания базы, у вас будет такое окно:
Здесь я создаю таблицу с именем users и 3 полями в ней. Дальше phpmyadmin попросит нас задать структуру для каждого поля:
Здесь в столбце «Поле» нужно указать имя, в «Тип» указываем тип данных которые будут там храниться (INT - это число, VARCHAR - строка или небольшой(!) текст). В «Дополнительно» указываем полю с именем «id» параметр «auto_increament» , что означает, оно будет увеличиваться каждый раз при вставке каких-либо данных, и задаем ему параметр «Первичный ключ» (ставим кругляшок), это значит, что по первому столбцу мы сможем однозначно идентифицировать поле.
«Однозначно идентифицировать поле» - значит даже если имя и фамилия будут одинаковы, столбец «id» будет иметь разные значения (так как он автоматически увеличивается на единицу каждый раз).
Теперь нажимаем «Сохранить». Тем самым мы создали таблицу users , в которой можем хранить имя и фамилию (id не нужно вставлять, mysql сделает все за нас), в БД users . Таблицу мы создавали для хранения записей. А как их туда вставлять? Читайте ниже 😉
Выбираем в меню «Вставить» и пишем нужные значения в необходимые поля. Теперь как удалить или изменить значения в базе данных mysql с СУБД PhpMyAdmin… Для удаления просто перейдите в меню «Обзор» и нажмите красный крестик напротив записи:
А для редактирования нажмите на карандаш и замените необходимые поля. Ну вот, на этом урок закончен. Теперь вы можете управлять базой данных mysql используя PhpMyAdmin. В следующем уроке, я научу вас хранить, получать, удалять и обновлять данные в базе используя php . Это очень удобно и практично.
Работа с базой данных mysql из php
Итак, для начала нужно научиться подключаться к уже заведомо созданной БД. Для этого используется вот такой код:
В вышеизложенном коде, я подключался к серверу localhost используя логин root который не требует пароля (поэтому его не указываем). После подключения к базе, мы можем проводить все те операции которые выполняли в СУБД phpmyadmin. То есть вставку, удаление, изменение и получение различной информации. Теперь по пунктам:
Вставка записей в базу данных SQL на php
$query="INSERT INTO `таблицу` (`указываем поле`,`указываем поле`) VALUES ("любое значение","любое значение")"; $result=mysql_query($query); if($result==true) { echo "Успешно!"; } else { echo "Ошибка!".mysql_error(); }
То есть вставка производится функцией INSERT . Если все прошло успешно, то mysql вернет результат true, или иначе - false.
Полей можно указывать хоть сколько, главное чтобы все они существовали в БД. То есть, к примеру существует таблица в которой есть поля «name» , «surname» и «city» . Для вставки в нее значений будем использовать такой код:
$query="INSERT INTO `users` (`name`,`surname`,`city`) VALUES ("Ruslan","Huzin","Kokshetau")";
$result=mysql_query($query);
if($result==true)
{
echo "Успешно!";
}
else
{
echo "Ошибка!
".mysql_error();
}
Удаление записей из базы данных SQL на php
Удаление выполняется функцией DELETE . Для этого будет примерно вот такой код:
$query="DELETE FROM `users` WHERE `name`="Ruslan" ";
$result=mysql_query($query);
if($result==true)
{
echo "Успешно!";
}
else
{
echo "Ошибка!
".mysql_error();
}
То есть мы удалим из таблицы users все строки (ну или одну), где столбец name равен значению Ruslan .
Изменение значений в базе данных MySQL на php
Также мы можем вносить изменения в уже существующие записи в таблице. К примеру нам надо заменить значение столбца name в строке, где столбец surname имеет значение Huzin . Для этого выполняем такой код:
$query="UPDATE `users` SET `name`="myname" WHERE `surname`="Huzin" ";
$result=mysql_query($query);
if($result==true)
{
echo "Успешно!";
}
else
{
echo "Ошибка!
".mysql_error();
}
Получение значений из базы данных
Теперь самое интересное. Раз мы записали что-то, то ведь должны и получить обратно? К примеру нам нужно достать из таблицы users всю строку где столбец name равен Ruslan . Для этого нам потребуется чуть другой код, нежели в первых примерах. Вот собственно и он:
$query="SELECT * FROM WHERE `name`="Ruslan" ";
$result=mysql_query($query);
if($result==true)
{
echo "Успешно!";
}
else
{
echo "Ошибка!
".mysql_error();
}
$data=mysql_fetch_array($result);
/* Теперь в переменной хранятся данные из таблицы */
Тут нам потребовалась еще одна функция, для записи выбранных данных в переменную (массив) на php. Для того что обратиться к выбранной строке, мы пишем так:
$data["имя столбца"]
то есть, чтобы достать фамилию из выбранной строки (где имя было Ruslan), мы на вывод должны написать:
echo $data["surname"];
А при выборке из таблицы, писали SELECT * , эта звездочка означает что нужно выбрать все столбцы из строки. Если нам надо, к примеру, выбрать только surname , пишем SELECT `surname` . А для выборки сразу нескольких строк из таблицы, потребуется еще и цикл для их вывода. Это в том случае, если к примеру, строк со столбцом Ruslan будет несколько. Вот код:
$query="SELECT * FROM WHERE `name`="Ruslan" ";
$result=mysql_query($query);
while($data=mysql_fetch_array($result))
{
echo $data["name"]."
".$data["surname"]."
"; }
Теперь на экран выведутся все строки у которых столбец name равен значению Ruslan .
Вот вы и познакомились с основными функциями управления базой данных mysql напрямую из php скрипта .
В данной статье мы рассмотрим способы обращения к таблицам баз данный MySQL с помощью языка запросов SQL. SQL - это аббревиатура, которая так и "раскрывается" - структуризированный язык запросов.
В языке PHP для это цели существует целый ряд функций с префиксом "mysql". Нам для рассмотрения запросов понадобится не так много из них. Функция, без которой в языке PHP выполнение SQL-запросов было бы просто невозможным:
Resource mysql_query(запрос)
Данная функция посылает запрос к базе данных и возвращает в случае успешного обращения идентификатор ресурса.
Для того чтобы подключиться к базе данных MySQL необходимо выполнить следующую последовательность:
$host="localhost"; // имя хоста (уточняется у провайдера) $database="db_name"; // имя базы данных, которую вы должны создать $user="user_name"; // заданное вами имя пользователя, либо определенное провайдером $pswd="your_pass"; // заданный вами пароль $dbh = mysql_connect($host, $user, $pswd) or die("Не могу соединиться с MySQL."); mysql_select_db($database) or die("Не могу подключиться к базе.");
Итак mysql_connect()
- функция для подключения к серверу MySQL на Вашем хостинге.
А mysql_select_db()
выбирает базу данных на сервере для подключения.
Иными словами подключаемся к серверу, выбираем базу и начинаем работать.
Функция die() вызывается в случае ошибки и выводит в окно браузера сообщение, которое вы указали.
Для завершения работы с базами данных используется функция:
Mysql_close($dbh);
Здесь $dbh
- дескриптор, которые при соединении возвратила функция mysql_connect
.
Закончив стартовый обзор, начнем рассмотрение собственно SQL-запросов.
Для этого прежде всего вам необходимо создать базу данных с определенном именем. А в ней создать таблицу, тоже с конкретным именем. В наших примерах будем обращаться к таблице my_sql_table
. Чтобы создать эту таблицу давайте выполним в phpmyadmin нашего localhost следующий запрос:
CREATE TABLE `my_sql_table` (`id` INT NOT NULL , // идентификатор будущих записей таблицы `firstname` VARCHAR(50) NOT NULL , // текстовое поле VARCHAR `surname` VARCHAR(50) NOT NULL , // max длиной 50 символов PRIMARY KEY (`id`) // первичный ключ - идентификатор id);
Итак таблица создана. Выполним первый запрос, который сразу оформим в виде PHP-кода:
\n";
echo "Имя: ".$row["firstname"]."
\n";
echo "Фамилия: ".$row["surname"]."
\n"; } ?>
Разберем PHP-код файла firstsql.php . Начнем с собственно запроса к таблицам базы данных (БД).
$query = "SELECT * FROM `my_sql_table`";
Данный запрос можно расшифровать так: выбрать из таблицы my_sql_table БД все записи из всех полей. Таким образом знак * после слова SELECT означает "выбрать абсолютно все". Итак, запрос сформирован. Теперь его надо выполнить:
$res = mysql_query($query);
В случае успешного выполнения запроса функция mysql_query()
вернет нам идентификатор ресурса $res
.
Его мы должны передать в качестве параметра в функцию mysql_fetch_array()
. Название этой функции говорит само за себя. Т.е. она формирует и выдает массив по выборке из таблицы БД. В случае нашей таблицы массив будет состоять из числа элементов, равных количествам записей (строк) в таблице и содержать значения id, firstname, surname
для каждой строки таблицы. Следовательно, следующий код:
While($row = mysql_fetch_array($res))
{
echo "Номер: ".$row["id"]."
\n";
echo "Имя:".$row["firstname"]."
\n";
echo "Фамилия:".$row["surname"]."
\n"; }
можно прокомментировать так: пока введенная нами переменная $row получает не нулевые результаты работы функции mysql_fetch_row
следует выдать в броузер значение полей $row["id"], $row["firstname"], $row["surname"]
с помощью echo
.
Если запрос выполнить так:
$query = "SELECT firstname FROM `my_sql_table`";
то это будет означать, что из всех строк выбирается только значения поля firstname.
Следовательно предыдущий код следует переписать как:
$res = mysql_query($query);
while($row = mysql_fetch_array($res))
{
echo "Имя:".$row["firstname"]."
\n";
}
Если Вы хотите выбрать строки таблицы с конкретным значением id где фамилия (surname) будет Петров , то запрос перепишется следующим образом:
$query = "SELECT id FROM `my_sql_table` where surname="Петров"";
А вот если потребуется узнать фамилию того, кто находится под номером, к примеру, 5, то запрос будет таким:
$query = "SELECT surname FROM `my_sql_table` where id=5";
В этом случае Вы знаете, что результатом запроса будет всего одна строка из таблицы. Т.е. нет смысла организовывать цикл с использованием while . И обработка запроса будет следующей
$res = mysql_query($query); $row = mysql_fetch_row($res); echo "Фамилия пятого человека в списке: ".$row."\n";
Здесь вместо mysql_fetch_array() мы применили mysql_fetch_row() . Т.е. получить значение поля (или полей) конкретной строки. Поскольку поле у нас было одно - surname - мы можем обратиться к единственному элементу массива $row как $row; .
Итак, рассмотрим наиболее типичные примеры запросов MySQL. Рассмотрение проведем на базе таблицы my_sql_table
:
1. Добавим в таблицу my_sql_table поле middle_name (отчество) после surname
:
$query = "ALTER TABLE `my_sql_table` ADD `middle_name`
VARCHAR(50) NOT NULL AFTER `surname`";
2. Теперь удалим поле surname из таблицы my_sql_table:
$query = "ALTER TABLE `my_sql_table` DROP `surname`";
3. Удаляем записи из таблицы my_sql_table с фамилией Сидоров:
$query = "DELETE FROM `my_sql_table` where surname="Сидоров"";
4. Помимо знаков равенства, также "больше" или "меньше", в языке MySQL запросов существует понятие "похоже на ". Выберем записи из таблицы my_sql_table, где в фамилии встречается "дор " :
$query = "SELECT * FROM `my_sql_table` where surname like "%дор%"";
Здесь наличие "%
" в начале и конце "дор" и означает, что запрос будет искать именно "дор", причем не важно в начале, конце, или середине фамилии он находится. Рассмотрим следующий пример
5. Выберем записи из таблицы my_sql_table с фамилией, которая начинается на П
. Обратите внимание на расположение "%
":
$query = "SELECT * FROM `my_sql_table` where surname like "П%"";
6. Вычислим максимальное значение id :
$query = "SELECT MAX(id) FROM `my_sql_table`";
7. Вычислим количество полей в my_sql_table с фамилией, которая начинается на П .
$query = "SELECT COUNT(*) FROM `my_sql_table` where surname like "П%"";
8. Удаление таблицы my_sql_table:
$query = "DROP TABLE `my_sql_table`";
Для запросов 1-3 на языке PHP достаточно просто выполнить запрос:
Mysql_query($query);
Мы рассмотрели наиболее характерные примеры запросов. Полагаю, с их помощью, следуя элементарной логике, Вы сможете выполнять более сложные запросы к созданным Вами таблицам баз данных MySQL.
Есть еще вопросы или что-то непонятно - добро пожаловать на наш | |
|
MySQL - это один из типов реляционных баз данных. MySQL представляет собой сервер, к которому могут подключаться различные пользователи.
Вы когда к интернету подключаетесь, вы же вводите логин и пароль, а также имя сервера к которому подключаетесь? При работе с MySQL используется такая же система.
Ещё один момент: что такое реляционная база данных? Реляционная - значит основанная на таблицах. Знаменитый редактор электронных таблиц Excel от Microsoft фактически является редактором реляционных баз данных.
Подключение к серверу MySQL
Для подключения к серверу MySQL в PHP используется функция mysqli_connect() . Данная функция получает три аргумента: имя сервера, имя пользователя и пароль.
Функция mysqli_connect() возвращает идентификатор подключения, его сохраняют в переменной и в дальнейшем используют для работы с базами данных.
Код подключения к серверу MySQL:
$link = mysqli_connect("localhost", "root", "");
В данном случае я работаю на локальном компьютере на Denwere, поэтому имя хоста localhost, имя пользователя root, а пароля нет.
Соединение также нужно закрыть, после завершения работы с MySQL. Для закрытия соединения используется функция mysqli_close() . Расширяем пример:
$link = mysqli_connect("localhost", "root", ""); if (!$link) die("Error"); mysqli_close($link);
Тут мы проверели идентификатор подключения на истинность, если с нашим подключением что-то не так, то и программа выполняться не будет, функция die() остановит её выполнение и выведет в браузер сообщение об ошибке.
Ошибки подключения
Для проверки подключения используются следующие функции:
- mysqli_connect_errno() - возвращает код ошибки последней попытки соединения. При отсутствие ошибок возвращает ноль.
- mysqli_connect_error() - возвращает описание последней ошибки подключения к серверу MySQL.
Функция mysqli_get_host_info() возвращает строку, содержащую тип используемого соединения.
Также обратите внимание, при помощи команды define я все параметры подключения сохранил в константах. Когда вы будете писать большие проекты, и подключатся к серверу MySQL будут много файлов, то удобно хранить параметры соединения в отдельном файле и вставлять его при помощи функции include или require .
Выбор базы данных
На сервере MySQL может быть несколько баз данных. Первым делом нам нужно выбрать для работы нужную нам базу. В PHP для этого в функции mysqli_connect() есть ещё один параметр - имя базы данных.
Я создал у себя на компьютере через phpMyAdmin с именем tester. Подключаемся к ней:
$link = mysqli_connect("localhost", "root", "", "tester"); if (!$link) die("Error"); mysql_close($link);
Итак, мы выбрали для работы базу данных. Но как нам известно, реляционная база данных состоит из таблиц, а в нашей базе данных таблиц пока что нет. База данных создаётся пустая, без таблиц. Таблицы в неё нужно добавить отдельно. Вот давайте добавим в неё таблицу средствами PHP.
Создаём таблицу
В названии баз данных MySQL часть SQL обозначает Structured Query Language, что переводится как структурированный язык запросов. На языке SQL мы будем писать запросы и из программы PHP посылать их серверу MySQL.
Чтобы создать таблицу нам просто нужно указать команду CREATE TABLE . Давайте создадим таблицу с именем users в столбцах которой будут храниться логины (столбец login) и пароли (столбец password) пользователей.
$query = "CREATE TABLE users(login VARCHAR(20), password VARCHAR(20))";
В этом коде мы присвоили переменной $query строку текста, которая представляет собой запрос SQL. Мы создаём таблицу с именем users, которая содержит два столбца login и password, у обоих тип данных VARCHAR(20). О типах данных мы поговорим позже, сейчас только отмечу, что VARCHAR(20) - это строка максимальной длины 20 символов.
Чтобы отправить наш запрос на сервер MySQL мы используем PHP функцию mysqli_query() . Эта функция возвращает положительное число, если операция прошла успешно и false, если произошла ошибка (синтаксис запроса ошибочный или у программы нет прав на выполнение запроса).
$link = mysqli_connect("localhost", "root", "", "tester"); if (!$link) die("Error"); $query = "CREATE TABLE users(login VARCHAR(20), password VARCHAR(20))"; mysqli_query($query); mysqli_close($link);
Запрос SQL не обязательно записывать в переменную, его можно сразу записать как аргумент функции mysql_query() . Просто так код выллядит читабельней.
У этого скрипта есть один недостаток - он ничего не выводит в браузер. Давайте добавим сообщение:
$link = mysqli_connect("localhost", "root", "", "tester"); if (!$link) die("Error"); $query = "CREATE TABLE users(login VARCHAR(20), password VARCHAR(20))"; if (mysqli_query($query)) echo "Таблица создана."; else echo "Таблица не создана."; mysqli_close($link);
Если мы повторно запустим этот скрипт на выполнение, то увидим в браузере сообщение: "Таблица не создана". Дело в том, что таблица была создана при первом запуске, а повторно невозможно создать таблицу с таким же именем. Мы столкнулись с ситуацией возникновения ошибки, значит настало время поговорить об обработке ошибок при работе с MySQL.
Обработка ошибок
При отладке программы нам может понадобиться точная информация о ошибке. Когда в MySQL происходит ошибка, то сервер базы данных устанавливает номер ошибки и строку с её описанием. Для доступа к этим данным в PHP есть специальные функции.
- mysqli_errno() - возвращает номер ошибки.
- mysqli_error() - возвращает строку с описанием ошибки.
Теперь давайте добавим функцию mysql_error() в наш скрипт:
$link = mysql_connect("localhost", "root", "", "tester"); if (!$link) die("Error"); $query = "CREATE TABLE users(login VARCHAR(20), password VARCHAR(20))"; if (mysqli_query($query)) echo "Таблица создана."; else echo "Таблица не создана: ".mysqli_error(); mysqli_close($link);
Теперь наш скрипт вернёт в браузер строку: "Таблица не создана: Table "users" already exists".
Удаление таблицы
Итак, мы сейчас имеем не нужную нам таблицу. Пришло время научиться удалять таблицы из базы данных.
Для удаления таблицы используется команда DROP TABLE , за которой следует имя таблицы.
$link = mysqli_connect("localhost", "root", "", "tester"); if (!$link) die("Error"); $query = "DROP TABLE users"; if (!mysqli_query($query)) echo "Ошибка при удалении таблицы: ".mysqli_error(); else echo "Таблица удалена."; mysqli_close($link);
Итоги
Итак, мы освоили основы MySQL. Что мы научились делать:
- Подключаться к базе данных MySQL при помощи функции mysqli_connect() .
- Закрывать соединение с сервером MySQL при помощи функции mysqli_close() .
- Отправлять SQL запросы серверу MySQL при помощи функции mysqli_query() .
- Мы узнали SQL запрос создания таблицы: create table.
- Мы узнали SQL запрос удаления таблицы: drop table.
- Мы узнали как обрабатывать ошибки при помощи функций mysqli_errno() и mysqli_error() .
Потом мы подробно рассмотрим типы данных MySQL.
Читаем следующий урок:
3 метода подключения к MySQL с PHP с примерами кода
Чтобы начать пользоваться базой данных MySQL, надо в первую очередь понять, как подключиться из вашей пользовательской PHP-программы (скрипта) к этой самой базе данных MySQL.
В этой статье описаны следующие три метода, а также соответствующие примеры PHP-кода, в которых объясняется, как подключиться к вашей базе данных из PHP.
Для всех приведенных ниже примеров мы будем подключаться к уже существующей базе данных MySQL. Примечание: все, что объясняется здесь, также будет работать с MariaDB, так же как и с MySQL.
1. Подключение к PHP с помощью расширения mysqli
*mysqli означает MySQL Improved
Создайте следующий файл mysqli.php
connect_error) {
die("Ошибка: невозможно подключиться: " . $conn->connect_error);
}
echo "Подключились к базе.
";
$result = $conn->query("SELECT id FROM goroda");
echo "Количество строк: $result->num_rows";
$result->close();
$conn->close();
?>
В приведенном выше коде:
- mysqli - эта функция инициирует новое соединение с использованием расширения mysqli. Функция принимает четыре аргумента:
- localhost имя хоста, на котором запущена база данных MySQL
- name - имя пользователя MySQL для подключения
- pass - пароль для пользователя mysql
- db - база данных MySQL для подключения.
- qvery - функция запроса MySQL. В этом примере мы выбираем столбец id из базы данных городов.
- Наконец, мы показываем количество строк, выбранных с использованием переменной num_rows в результате. Мы также закрываем как результат, так и переменную соединения, как показано выше.
Подключились к базе.
Количество строк: 6
2. Подключение из PHP MySQL PDO Extension
*PDO означает объекты данных PHP
Драйвер PDO_MYSQL реализует интерфейс PDO, предоставляемый PHP, для подключения из вашего PHP-скрипта к базе данных MySQL.
Создайте следующий файл mysql-pdo.php:
setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Подключились к базе.
";
$sql = "SELECT id FROM goroda";
print "Список id:
";
foreach ($conn->query($sql) as $row) {
print $row["id"] . "
";
}
$conn = null;
}
catch(PDOException $err) {
echo "Ошибка: невозможно подключиться: " . $err->getMessage();
}
?>
В приведенном выше:
- new PDO - создаст новый объект PDO, который примет следующие три аргумента:
- mysql connect string: он будет в формате «mysql:host=localhost;dbname=db». В приведенном выше примере db работает на localhost, и мы подключаемся к базе данных db.
- Имя пользователя MySQL для подключения
- Пароль для пользователя mysql
- переменная $sql - создать запрос sql, который вы хотите выполнить. В этом примере мы выбираем столбец id из таблицы городов.
- query ($sql). Здесь мы выполняем запрос sql, который мы только что создали.
- foreach. Здесь мы перебираем результат из указанной выше команды запроса и сохраняем ее в переменной $row, а затем выводим ее с помощью echo.
- В MySQL PDO, чтобы закрыть соединение, просто установите переменную $conn в значение null.
Подключились к базе. Список id: 1 2 3 4 5 6 3. Подключение из PHP c использование устаревших функций mysql
Используйте этот метод, только если вы используете более старую версию PHP и по какой-то причине не можете обновить ее до новой версии. Рекомендуется использовать метод №2 и метод №3, показанные выше, вместо этого метода. Я включил этот метод только для справки, а не как рекомендацию для использования.
Это конкретное расширение было устарело от версии PHP 5.5. Но, начиная с версии PHP 7.0, это даже не будет работать, поскольку оно было удалено. Начиная с версии PHP 5.5, когда вы используете эти функции, она будет генерировать ошибку E_DEPRECATED.
Создайте файл mysql.php:
";
$result = mysql_query("SELECT id FROM goroda");
$row = mysql_fetch_row($result);
echo "id 1: ", $row, "
\n";
mysql_close($conn);
?>
В приведенном выше:
- Функция mysql_connect принимает три аргумента:
- имя хоста, в котором запущена база данных MySQL;
- имя пользователя MySQL для подключения;
- пароль для пользователя mysql. Здесь он подключается к базе данных MySQL, которая выполняется на локальном сервере с использованием имени пользователя и его пароля.
- Функция mysql_select_db. Как следует из названия, она выбирает базу данных, к которой вы хотите подключиться. Эквивалентно команде «use». В этом примере мы подключаемся к базе данных db.
- Функция mysql_query - используется для указания вашего запроса MySQL. В этом примере мы выбираем столбец id из базы данных городов. mysql_fetch_row. Используйте эту функцию для извлечения строк из SQL-запроса, который мы только что создали.
- Наконец, закройте соединение, используя команду mysql_close, как показано выше.
Подключились к базе. id 1: 1 Вот таким образом можно подключаться к MySQL. Повторюсь, лучше использовать два первых способа; о
Мы научились подключаться серверу MySQL, выбирать базу данных для работы, узнали PHP-функцию отправки запросов серверу MySQL, узнали два простейших запроса (создание и удаление таблицы), ну и узнали как закрывать соединение.
Теперь мы будем более глубоко изучать запросы MySQL. Итак, приступим!
Создание таблицы - CREATE TABLE
Сейчас у нас пустая база данных, в ней нет таблиц. Поэтому сначала создадим таблицу. Мы уже знаем как это делать из первой части.
Вот код скрипта, который создаст нужную нам табличку:
$link = mysqli_connect("localhost", "root", "", "tester"); if (!$link) die("Error"); $query = "CREATE TABLE users(login VARCHAR(20), password VARCHAR(20))"; if (mysqli_query($link, $query)) echo "Таблица создана."; else echo "Таблица не создана: ".mysqli_error(); mysqli_close($link);
В нашей таблице только два поля: логин и пароль. Пока что нам больше не нужно, не будем усложнять процесс.
Итак, таблица создана.
Добавление строк (записей) в таблицу - INSERT
Добавить новую строку в таблицу можно при помощи SQL команды insert. Вот пример:
$link = mysqli_connect("localhost", "root", "", "tester"); if (!$link) die("Error"); $query = "INSERT INTO users (login, password) VALUE ("zeus", "pass123")"; if (mysqli_query($link, $query)) echo "Пользователь добавлен."; else echo "Пользователь не добавлен: " . mysqli_error(); mysqli_close($link);
SQL запрос состоит из команды INSERT INTO , имени базы данных users, затем в скобках идут имена полей, потом слово VALUE , после которого в скобках следуют добавляемые значения. Значения берутся в кавычки.
Синтаксис запроса выглядит так:
INSERT INTO имя_таблицы (столбец1, столбец2) VALUE ("х1", "х2")
Кавычки во вторых скобках обязательны.
На месте значений могут быть переменные. Вот пример:
$link = mysqli_connect("localhost", "root", "", "tester"); if (!$link) die("Error"); $login = "zeus"; $password = "pass123"; $query = "INSERT INTO users (login, password) VALUE ("$login", "$password")"; if (mysqli_query($link, $query)) echo "Пользователь добавлен."; else echo "Пользователь не добавлен: " . mysqli_error(); mysqli_close($link);
Конечно, в этом примере мало смысла. Возможно, новичкам будет полезно услышать, что так в базу данных записываются логины и пароли, которые сообщают пользователи при регистрации. Эти данные хранятся в переменных, потом, после проверки, записываются в базу.
Существует быстрый способ вставки нескольких строк одним запросом INSERT:
INSERT INTO users (login, password) VALUE ("bob", "eee333"), ("Rooki", "12345"), ("magy", "olol88e8")
Как видим, перечисляемые данные просто отделены запятыми.
Итак, при помощи команды INSERT мы научились добавлять записи в таблицу. Идём дальше.
Просмотр таблицы: команда SELECT
Теперь у нас есть таблица users, в которой есть строки. Прошлый скрипт можно запустить несколько раз, и каждый раз он будет добавлять строку в таблицу. Теперь мы можем не знать, сколько у нас строк в таблице. А хочется знать что у нас в ней записано.
Для получения данных из таблицы используется SQL-команда SELECT . Знак * обозначает что мы запрашиваем все данные, затем после слова FROM пишем имя таблицы, из которой хотим получить данные.
Запросим все данные из таблицы users:
$link = mysqli_connect("localhost", "root", "", "tester"); if (!$link) die("Error"); $query = "SELECT * FROM users"; $result = mysqli_query($link, $query); if (!$result) echo "Произошла ошибка: " . mysqli_error(); else echo "Данные получены"; mysqli_close($link);
Функция mysqli_query() вернула нам идентификатор результата запроса - мы его помещаем в переменную и в дальнейшем будем работать с ним при помощи других функций PHP.
Число записей в запросе
Давайте определим сколько строк в нашем запросе? Я вот запустил скрипт добавления записи в таблицу сам не помню сколько раз и теперь не знаю сколько строк в моей таблице.
Для определения числа строк в результате запроса используют функцию mysqli_num_rows() . Этой функции передаётся идентификатор результата запроса, а вернёт она число записей.
$link = mysqli_connect("localhost", "root", "", "tester"); if (!$link) die("Error"); $query = "SELECT * FROM users"; $result = mysqli_query($link, $query); if (!$result) echo "Произошла ошибка: " . mysqli_error(); else echo "Данные получены"; $count = mysqli_num_rows($result); echo "Всего строк в таблице: $count."; mysqli_close($link);
Если нам нужно узнать число записей в таблице, то приведённый способ не самый подходящий. Тут мы узнали число записей, найденных в запросе, но число записей в таблице ищется по другому.
Число записей в таблице SELECT COUNT(*)
Чтобы узнать число записей в таблице можно воспользоваться командой SELECT COUNT(*) FROM имя_таблицы.
$link = mysqli_connect("localhost", "root", ""); if (!$link) die("Error"); mysqli_select_db("tester"); $query = "SELECT * FROM users"; $result = mysqli_query($link, $query); if (!$result) echo "Произошла ошибка: " . mysqli_error(); else echo "Данные получены. "; $count = mysqli_fetch_row($result); echo "Всего строк в таблице: $count."; mysqli_close($link);
Обратите внимание, тут мы использовали новую функцию PHP mysqli_fetch_row() для получения данных. Эта функция возвращает ряд результата запроса в форме простого массива, в нашем случае в ряду одно поле и оно имеет индес 0.
Просмотр результата запроса в цикле
После выполнения SQL-запроса с командой SELECT и получения идентификатора результата запроса, PHP создаёт в наборе записей результата внутренний указатель. Этот указатель автоматически перемещается на следующую запись, после обращения к текущей записи. Благодаря этому механизму набор результа запроса SELECT очень удобно просматривать в цикле.
В PHP есть несколько функций, при помощи которых можно дла каждой строки результирующего запроса получить массив, состоящий из её полей. Для примера возьмём функцию mysqli_fetch_row() . Этой функции передают идентификатор запроса, а возвращает она массив. Так в цикле просматривается весь результат запроса, по достижению конца результата запроса функция вернёт false .
Итак, запрашиваем все данные из таблицы users (SELECT * FROM users).
";
while ($row = mysqli_fetch_row($result))
{
echo "Логин: $row. Пароль: $row.
";
}
mysqli_close($link);
Функция mysqli_fetch_row() возвращает простой массив. В каждой итерации цикла мы получим массив с строкой из таблицы, доступ к полям которой мы можем получить указав числовой индекс.
То же самое можно сделать используя функцию mysql_fetch_assoc() , она возвращает ассоциативный массив.
$link = mysqli_connect("localhost", "root", "");
if (!$link) die("Error");
mysqli_select_db("tester");
$result = mysqli_query($link, "SELECT * FROM users");
if (!$result) echo "Произошла ошибка: " . mysqli_error();
else echo "Данные получены.
";
while ($row = mysqli_fetch_assoc($result))
{
echo "Логин: $row. Пароль: $row.
";
}
mysqli_close($link);
Также есть функции mysqli_fetch_array() - возвращает любой тип массива, и mysqli_fetch_object() - возвращает объект.
Запрос SELECT DISTINCT - уникальные значения полей
Давайте создадим новую таблицу:
$link = mysqli_connect("localhost", "root", "");
if (!$link) die("Error");
mysqli_select_db("tester");
// удаляем существующую таблицу
mysqli_query($link, "DROP TABLE users");
// создаём новую таблицу
$query = "CREATE TABLE users(name VARCHAR(20),
surname VARCHAR(20),
age TINYINT UNSIGNED)";
if (mysqli_query($link, $query)) echo "Таблица создана.
";
else echo "Таблица не создана: " . mysqli_error();
// функция для добавления записей в таблицу
function add_new_line($link, $query)
{
if (!mysqli_query($link, $query)) echo "Пользователь не добавлен: " . mysqli_error();
}
// добавляем записи
add_new_line($link, "INSERT INTO users (name, surname, age) VALUE ("Max", "Jayson", "33")");
add_new_line($link, "INSERT INTO users (name, surname, age) VALUE ("Bob", "Freeman", "26")");
add_new_line($link, "INSERT INTO users (name, surname, age) VALUE ("Sara", "Lopes", "65")");
add_new_line($link, "INSERT INTO users (name, surname, age) VALUE ("Serg", "Pupin", "29")");
add_new_line($link, "INSERT INTO users (name, surname, age) VALUE ("Serg", "Borman", "43")");
add_new_line($link, "INSERT INTO users (name, surname, age) VALUE ("Max", "Lopes", "21")");
// выводим содержание таблицы в браузер
$result = mysqli_query($link, "SELECT * FROM users");
if (!$result) echo "Произошла ошибка: " . mysqli_error();
else echo "Данные получены.
";
while ($row = mysqli_fetch_assoc($result))
{
echo "Имя: $row. Фамилия: $row. Возраст: $row.
";
}
mysqli_close($link);
Итак, мы имеем новую, более сложную таблицу с уникальными записями. Сейчас давайте посмотрим, сколько у нас имён в базе данных.
$link = mysqli_connect("localhost", "root", "");
if (!$link) die("Error");
mysqli_select_db("tester");
$result = mysqli_query($link, "SELECT DISTINCT name FROM users");
echo "Всего имён: " . mysqli_num_rows($result)."
";
echo "Список имён:
";
while ($name = mysqli_fetch_row($result))
{
echo "$name
";
}
mysqli_close($link);
SQL-запрос " SELECT DISTINCT name FROM users " вернул результат со всеми уникальными именами в нашей таблице. Каждое уникальное имя в новой строке результата запроса.
Сортировка результата - ORDER BY
Добавив в SQL-запрос команду ORDER BY мы сортируем результат запроса по возрастанию (цифры и буквы по алфавиту). Вот пример, в котором можно сравнить обычный запрос и отсортированный по возрасту (поле age).
";
}
echo "Сортируем по возрасту:
";
$result = mysqli_query($link, "SELECT * FROM users ORDER BY age");
while ($line = mysqli_fetch_row($result))
{
echo "Имя: $line. Фамилия: $line. Возраст: $line.
";
}
mysqli_close($link);
Можете заменить поле age в команде ORDER BY на поле name и посмотреть результат.
Чтобы сортировать результат запроса в обратном порядке используйте команду ORDER BY age DESC .
Соответствие условию - WHERE
Добавив в SQL-запрос команду WHERE мы запросим только те записи, которые соответствуют условию. Например, сделаем запрос на людей младше 30 лет.
Для этого используем SQL-запрос " SELECT * FROM users WHERE age
$link = mysqli_connect("localhost", "root", "");
if (!$link) die("Error");
mysqli_select_db("tester");
echo "Люди младше 30:
";
$result = mysqli_query($link, "SELECT * FROM users WHERE age<30");
while ($line = mysqli_fetch_row($result))
{
echo "Имя: $line. Фамилия: $line. Возраст: $line.
";
}
mysqli_close($link);
Также мы можем сразу отсортировать результат по возрастанию age:
" SELECT * FROM users WHERE age<30 ORDER BY age ".
Если мы сделаем запрос " SELECT name FROM users WHERE age<30 ORDER BY age ", то в результате нам вернут только значения поля "name", но они также будут отсортированы по age.
Мы можем запросить значения двух полей: " SELECT name, age FROM users WHERE age
Теперь запросим все пользователей, с именем "Max".
$link = mysqli_connect("localhost", "root", "");
if (!$link) die("Error");
mysqli_select_db("tester");
echo "Все Максы:
";
$result = mysqli_query($link, "SELECT * FROM users WHERE name="Max"");
while ($line = mysqli_fetch_row($result))
{
echo "Имя: $line. Фамилия: $line. Возраст: $line.
";
}
mysqli_close($link);
И ещё пример запроса, - выберет только имена (name) из таблицы users, все кроме Max.
SELECT name FROM users WHERE name!="Max"
На этом с запросом WHERE всё.
Ограничение записей - LIMIT
Добавив в SQL-запрос команду LIMIT мы ограничим размер результата.
Запрос, который выводит первые три записи: " SELECT * FROM users LIMIT 3 ". Давайте посмотрим как он работает:
$link = mysqli_connect("localhost", "root", "");
if (!$link) die("Error");
mysqli_select_db("tester");
echo "Содержание таблицы:
";
$result = mysqli_query($link, "SELECT * FROM users");
while ($line = mysqli_fetch_row($result))
{
echo "Имя: $line. Фамилия: $line. Возраст: $line.
";
}
echo "
Первые три записи:
";
$result = mysqli_query($link, "SELECT * FROM users LIMIT 3");
while ($line = mysqli_fetch_row($result))
{
echo "Имя: $line. Фамилия: $line. Возраст: $line.
";
}
echo "
Вторые три записи:
";
$result = mysqli_query($link, "SELECT * FROM users LIMIT 3, 3");
while ($line = mysqli_fetch_row($result))
{
echo "Имя: $line. Фамилия: $line. Возраст: $line.
";
}
mysqli_close($link);
Также тут мы использовали запрос: " SELECT * FROM users LIMIT 3, 3 ". Вторая тройка указывает смещение в результате запроса.
Соответствие шаблону - LIKE
Язык SQL поддерживает простые шаблоны. Для этого используется команда LIKE и шаблон задаётся с использованием символа % .
Вот пример запроса, который вернёт все записи с именами, начинающимися на букву S.
SELECT * FROM users WHERE name LIKE "S%"
Тестирую запрос:
$link = mysqli_connect("localhost", "root", "");
if (!$link) die("Error");
mysqli_select_db("tester");
echo "Содержание таблицы:
";
$result = mysqli_query($link, "SELECT * FROM users");
while ($line = mysqli_fetch_row($result))
{
echo "Имя: $line. Фамилия: $line. Возраст: $line.
";
}
echo "
Имена на букву S:
";
$result = mysqli_query($link, "SELECT * FROM users WHERE name LIKE "S%"");
while ($line = mysqli_fetch_row($result))
{
echo "Имя: $line. Фамилия: $line. Возраст: $line.
";
}
mysqli_close($link);
Вот пример запроса, который вернёт все записи с фамилиями, заканчивающимися на букву s.
SELECT * FROM users WHERE name LIKE "%s"
Соответствие условию - IN
Этот запрос с использованием команды IN вернёт только те строки, которые строго соответствую условию.
Например, нас интересуют люди с возрастом 21, 26 и 33 года.
SELECT * FROM users WHERE age IN (21,26,33)
Тестирую запрос:
$link = mysqli_connect("localhost", "root", "");
if (!$link) die("Error");
mysqli_select_db("tester");
echo "Содержание таблицы:
";
$result = mysqli_query($link, "SELECT * FROM users");
while ($line = mysqli_fetch_row($result))
{
echo "Имя: $line. Фамилия: $line. Возраст: $line.
";
}
echo "
Люди, с требуемыми возрастами (21, 26, 33):
";
$result = mysqli_query($link, "SELECT * FROM users WHERE age IN (21, 26, 33)");
while ($line = mysqli_fetch_row($result))
{
echo "Имя: $line. Фамилия: $line. Возраст: $line.
";
}
mysqli_close($link);
Максимальное и минимальное значение в столбце
Выбирает максимальное значение age в таблице users.
SELECT max(age) FROM users
Следующий запрос выбирает данные из таблицы users по полям name и age где age принимает минимальное значение.
SELECT name, min(age) FROM users
Обновление записи - UPDATE
Давайте Max Lopes установим возраст 15 лет. Это делается запросом MySQL:
UPDATE users SET age="15" WHERE name="Max" AND surname="Lopes"
Обратите внимание на новую команду AND (and - по английски значит "и") в запросе. Если мы не уточним фамилию, то возраст 15 лет будет установлен всем Максам в таблице.
Одним запросом можно обновить два и более полей в одной строке. Делается это следующим образом:
UPDATE users SET age = "18", surname = "Coocker" WHERE id = "3"
В нашей таблице нет поля id, так что этот запрос не сработает на ней. Но это поле, содержащее уникальные номера строк, мы обязательно выучим.
Удалить запись - DELETE
Запрос к базе данных MySQL для удаления записи:
DELETE FROM users WHERE id = "10"
Опять же, в нашей таблице нет поля id. Но мы можем удалить из неё всех людей, младше 18 лет.
DELETE FROM users WHERE age < "18"
Удалить таблицу - DROP TABLE
Запрос к базе данных MySQL который удаляет целиком таблицу users:
DROP TABLE users
Удалить столбец - ALTER TABLE ... DROP ...
Иногда может потребоваться удалить столбец из таблицы, давайте например удалим из users столбец age:
ALTER TABLE users DROP age
Этот запрос MySQL удалил столбец окончательно и безвозвратно.
Добавить столбец - ALTER TABLE ... ADD ...
Иногда может потребоваться добавить столбец в существующую таблицу, давайте например снова добавим в таблицу users столбец age:
ALTER TABLE users ADD age TINYINT UNSIGNED
Переименование столбца - ALTER TABLE ... CHANGE ...
Иногда может потребоваться переименовать столбец, например столбец age переименовать в vozrast. Делаем это так:
ALTER TABLE users CHANGE age vozrast TINYINT UNSIGNED
Этот запрос MySQL переименовал столбец age в vozrast с типом данных TINYINT UNSIGNED .
Переименование таблицы - RENAME TABLE ... TO ...
Иногда может потребоваться переименовать таблицу:
RENAME TABLE users TO peoples
Удаление базы данных - DROP DATABASE
Этот запрос может удалить базу данных с имененм tester:
DROP DATABASE tester
Создание базы данных - CREATE DATABASE
Этот запрос создаёт базу данных с имененм tester:
CREATE DATABASE tester
У меня на денвере этот запрос работает, но на хостинге может и не сработать, если у пользователя базы данных нет прав на выполнение удаления.
Итоги
Итак, в этой части мы ознакомились с запросами к MySQL. Многие из рассмотренных нами запросов нам не часто пригодятся в процессе работы, но знать их нужно, так как они точно пригодятся в процессе разработки скриптов.
Некоторые запросы обычно делают только из phpMyAdmin (создание и удаление баз данных например).
В работе сайтов обычно нужно добавить запись в таблицу, редактировать запись или удалить запись из таблицы.
Следующим шагом будет изучение типов данных в MySQL.