Связь с базами данных MySQL. Отправка запросов к базе данных в PHP Подключение к бд php формы
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 - это один из типов реляционных баз данных. 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.
Читаем следующий урок:
Мы научились подключаться серверу 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.
При помощи php...
Создание соединения разными способами :
1) старый дедовский способ подключения к MySQL:
$conn=mysql_connect($db_hostname, $db_username, $db_password) or die ("Нет подключения к серверу");
mysql_select_db($db_database,$conn) or die ("Нет удалось соединиться с БД");
Пояснения к переменным ниже.
При этом используются функции:
- mysql_connect() - для подключения к серверу;
- mysql_select_db() - для подключения к БД;
При этом постоянно проверяем на наличие ошибки таким способом: or die ("Ошибка такая то"); - переводится как или умри с такой-то ошибкой - чтобы сразу найти где ошибка.
config.php
// переменные для соединения с БД
$host = "localhost"; / хост
$username = "root"; // пароль для подключения к БД
$password = ""; // пароль для подлючения к базе данных - на локальном компьютере он может иметь пустое значение.
$database_name = "my-dolgi"; // имя БД
// старый способ соедения с БД
mysql_connect($host, $username, $password) or die("Не могу соединиться создать соединение");
// выбрать БД. Если ошибка - вывести
mysql_select_db($database_name) or die(mysql_error());
index.php
require_once "config.php";
$result = mysql_query("SELECT Name, Money FROM Dolg ORDER BY Money DESC LIMIT 5") or die(mysql_error());
";
while ($row = mysql_fetch_assoc($result)) {
";
}
mysql_free_result($result);
// Закрываем соединение
mysql_close();
2) Более прогрессивный процедурный стиль - соединение с БД при помощи mysqli:
Данный способ:
- удобнее;
- быстрее до 40 раз;
- повышена безопасность;
- есть новые возможности и функции;
Пример соединения с БД на php с выборкой из таблицы
config.php
// соедения с БД
$link = mysqli_connect("localhost", "username", "password", "name-database"); // тут вводим прям данные ваши: имя юзера, пароль и имя БД, первое поле обычно localhost
// вывод ошибки соединения
if (!$link) {
echo "Ошибка подключения к БД. Код ошибки: " . mysqli_connect_error();
exit;
}
Обратите внимание - везде используется mysqli , а не mysql !!!
index.php
require_once "config.php";
// Выполнить запрос. Если ошибка - выводим
if ($result = mysqli_query
($link,
"SELECT Name, Money FROM Dolg ORDER BY Money DESC LIMIT 5")) {
Echo "Кому я должен по убыванию:
";
// Выборка результатов запроса
while ($row = mysqli_fetch_assoc
($result)) {
echo $row["Name"] . " с долгом " . $row["Money"] . " рублей.
";
}
// освобождение используемой памяти
mysqli_free_result
($result);
// Закрываем соединение
mysqli_close
($link
);
}
Как видим, некоторые моменты поменялись (выделены курсивом).
3) Объектно-ориентированный метод подключения к бд MySQL - с помощью методов и классов:
Минусы: сложнее и менее восприимчив к ошибкам.
Плюсы: краткость и удобство для программистов с опытом.
$conn = new mysqli($db_hostname, $db_username, $db_password, $db_database);
if($conn->connect_errno){
die($conn->connect_error);
} else {echo "Соединение с БД успешно установлено";}
тут в принципе все интуитивно понятно:
- $db_hostname - это хост (в основном localhost),
- $db_database - имя БД ;
- $db_username и $db_password - имя пользователя и пароль соответственно!
Пример соединения с БД на php стиль ООП с выборкой из таблицы
config.php
// соедения с БД
$mysqli = new mysqli ("localhost", "username", "password", "name-database"); // тут вводим прям данные ваши: имя юзера, пароль и имя БД, первое поле обычно localhost
// вывод ошибки соединения
if ($mysqli->connect_error) {
die ("Ошибка подключения к БД: (" . $mysqli->connect_errno . ") " . mysqli_connect_error) ;
}
Обратите внимание - везде используется mysqli , а не mysql !!! и в отличие от предыдущего метода появляются стрелочки "->", которые показывают, что это стиль ООП.
index.php
require_once "config.php";
// Выполнить запрос. Если ошибка - выводим
if ($result = $mysqli->query
("SELECT Name, Money FROM Dolg ORDER BY Money DESC LIMIT 5")) {
Echo "Кому я должен по убыванию:
";
// Выборка результатов запроса
while ($row = $result->fetch_assoc
()) {
echo $row["Name"] . " с долгом " . $row["Money"] . " рублей.
";
}
// освобождение используемой памяти
$result->close()
;
// Закрываем соединение
$mysqli->close
();
}
Задание вам такое - найти отличия.
4) Связь с БД при помощи PDO:
При соединении с базой данных MySQL используются подготовленные выражения(методом prepare) и в результате большая безопасность и сильно увеличивает быстродействие.
config файл от предыдущего метода! - такой же
index.php
// PDO стиль для связи с MySQL
if ($stmt = $mysqli->prepare("SELECT Name, Voney FROM Dolg ORDER BY Money < ? LIMIT 5")) {
$stmt->bind_param("i", $summa);
$summa = 100000;
//запускаем выполнение
$stmt->execute();
// Объявление переменных для заготовленных значений
$stmt->bind_result($col1, $col2);
Echo "Кому я должен по убыванию:
";
// Выборка результатов запроса
while ($stmt->fetch()) {
echo $col1 . " с долгом " . $col2 . " рублей.
";
}
// освобождение используемой памяти
$stmt->close();
// Закрываем соединение
$mysqli->close();
Как видим, тут намного сложнее и надо изучать PDO - это отдельная тема.