Создание соединения с БД MySQL разными способами. SQL - запросы и их обработка с помощью PHP Установить связь с mysql и php

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.
define ("HOST", "localhost"); define ("DB_USER", "root"); define ("DB_PASSWORD", ""); define ("DB", "tester"); $link = mysqli_connect(HOST, DB_USER, DB_PASSWORD, DB); /* проверка соединения */ if (mysqli_connect_errno()) { printf("Не удалось подключиться: %s\n", mysqli_connect_error()); exit(); } else { printf("Удалось подключиться: %s\n", mysqli_get_host_info($link)); }

Функция 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

SQL - это аббревиатура от слов Structured Query Language , что означает структурированный язык запросов. Этот язык является стандартным средством для доступа к различным базам данных.

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

Для работы с базами данных удобно пользоваться средством, входящее в комплект Web-разработчика: Denwer phpMyAdmin . Здесь можно создать новую базу данных, создать новую таблицу в выбранной базе данных, заполнить таблицу данными, а также добавлять, удалять и редактировать данные.

В MySQL определены три базовых типа данных: числовой, дата и время и строчный. Каждая из этих категорий подразделяется на множество типов. Основные из них:


Каждый столбец после своего типа данных содержит и другие спецификаторы:

Тип Описание
NOT NULL Все строки таблицы должны иметь значение в этом атрибуте. Если не указано, поле может быть пустым (NULL)
AUTO_INCREMENT Специальная возможность MySQL, которую можно задействовать в числовых столбцах. Если при вставке строк в таблицу оставлять такое поле пустым, MySQL автоматически генерирует уникальное значение идентификатора. Это значение будет на единицу больше максимального значения, уже существующего в столбце. В каждой таблице может быть не больше одного такого поля. Столбцы с AUTO_INCREMENT должны быть проиндексированными
PRIMARY KEY Столбец является первичным ключом для таблицы. Данные в этом столбце должны быть уникальными. MySQL автоматически индексирует этот столбец
UNSIGNED После целочисленного типа означает, что его значение может быть либо положительным, либо нулевым
COMMENT Название столбца таблицы

Создание новой базы данных MySQL CREATE DATABASE .

CREATE DATABASE IF NOT EXISTS `base` DEFAULT CHARACTER SET cp1251 COLLATE cp1251_bin

Создание новой таблицы осуществляется при помощи SQL-команды CREATE TABLE . Например, таблица books для книжного магазина будет содержать пять полей: ISBN, автор, название, цена и количество экземпляров:

CREATE TABLE books (ISBN CHAR(13) NOT NULL, PRIMARY KEY (ISBN), author VARCHAR(30), title VARCHAR(60), price FLOAT(4,2), quantity TINYINT UNSIGNED); Чтобы избежать сообщения об ошибке, если таблица уже есть необходимо изменить первую строчку, добавив фразу "IF NOT EXISTS": CREATE TABLE IF NOT EXISTS books ...

Для создания автообновляемого поля с текущей датой типа TIMESTAMP или DATETIME используйте следующую конструкцию:

CREATE TABLE t1 (ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, dt DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);

Добавление данных в эту таблицу осуществляется при помощи SQL-команды INSERT . Например:

INSERT INTO books (ISBN, author, title, price, quantity) VALUES ("5-8459-0184-7", "Зандстра Мэт", "Освой самостоятельно PHP4 за 24 часа", "129", "5");

Для извлечения данных из таблицы служит оператор SELECT . Он извлекает данные из базы, выбирая строки, которые отвечают заданному критерию поиска. Оператор SELECT сопровождает немалое количество опций и вариантов использования.

Символ * означает, что необходимы все поля. Например:

SELECT * FROM books;

Для получения доступа только к некоторому полю следует указать его имя в инструкции SELECT . Например:

SELECT author, title, price FROM books;

Чтобы получить доступ к подмножеству строк в таблице, следует указать критерий выбора, который устанавливает конструкция WHERE . Например, чтобы выбрать имеющиеся в наличии недорогие книги о PHP, надо составить запрос:

SELECT * FROM books WHERE price % Соответствует любому количеству символов, даже нулевых
_ Соответствует ровно одному символу

Для того, чтобы строки, извлеченные по запросу, перечислялись в определенном порядке, используется конструкция ORDER BY . Например:

SELECT * FROM books ORDER BY price;

По умолчанию порядок сортировки идет по возрастанию. Изменить порядок сортировки на обратный можно с помощью ключевого слова DESC :

SELECT * FROM books ORDER BY price DESC;

Сортировать можно и по нескольким столбцам. Вместо названий столбцов можно использовать их порядковые номера:

SELECT * FROM books ORDER BY 4, 2, 3;

Для изменения ранее записанных в таблицу значений нужно воспользоваться командой UPDATE . Например, цену всех книг повысили на 10%:

UPDATE books SET price = price * 1.1;

Конструкция WHERE ограничит работу UPDATE определенным строками. Например:

UPDATE books SET price = price * 1.05 WHERE price

Для удаления строк из базы данных используется оператор DELETE . Ненужные строки указываются при помощи конструкции WHERE . Например, какие-то книги проданы:

DELETE FROM books WHERE quantity = 0;

Если нужно удалить все записи

TRUNCATE TABLE table_name

Для полного удаления таблицы используется:

DROP TABLE table_name

Связь PHP с базой данных MySQL

Поработав с phpMyAdmin над созданием базы данных, можно приступить к подключению этой базы данных к внешнему Web-интерфейсу.

Чтобы получить доступ к базе данных из Web, используя PHP, надо сделать следующие основные шаги:

  • Подключение к серверу MySQL.
  • Выбор базы данных.
  • Выполнение запроса к базе данных:
    • добавление ;
    • удаление ;
    • изменение ;
    • поиск ;
    • сортировка .
  • Получение результата запроса.
  • Отсоединение от базы данных.

Для подключения к серверу базы данных в PHP есть функция mysql_connect() . Ее аргументы: имя компьютера, имя пользователя и пароль. Эти аргументы можно опустить. По умолчанию имя компьютера = localhost , тогда имя пользователя и пароль не требуется. Если PHP используется в сочетании с сервером Apache, то можно воспользоваться функцией mysql_pconnect() . В этом случае соединение с сервером не исчезает после завершения работы программы или вызова функции mysql_close() . Функции mysql_connect() и mysql_pconnect() возвращают идентификатор подключения, если все прошло успешно. Например:

$link = mysql_pconnect (); if (!$link) die ("Невозможно подключение к MySQL");

После того, как соединение с сервером MySQL установлено, нужно выбрать базу данных. Для этого используется функция mysql_select_db() . Ее аргумент: имя базы данных. Функция возвращает true , если указанная база данных существует и доступ к ней возможен. Например:

$db = "sample"; mysql_select_db ($db) or die ("Невозможно открыть $db");

Для добавления, удаления, изменения и выбора данных нужно сконструировать и выполнить запрос SQL. Для этого в языке PHP существует функция mysql_query() . Ее аргумент: строка с запросом. Функция возвращает идентификатор запроса.

Пример 1

Добавление записи в таблицу

При каждом выполнении примера 1 в таблицу будет добавляться новая запись, содержащая одни и те же данные. Разумеется имеет смысл добавлять в базу данные, введенные пользователем.

В примере 2.1 приведена HTML-форма для добавления новых книг в базу данных.

Пример 2.1

HTML-форма добавления новых книг
ISBN
Автор
Название
Цена
Количество

Результаты заполнения этой формы передаются в insert_book.php.

Пример 2.2

Программа добавления новых книг (файл insert_book.php) Пожалуйста, вернитесь назад и закончите ввод"); } $isbn = trim ($_POST["isbn"]); $author = trim ($_POST["author"]); $title = trim ($_POST["title"]) ; $isbn = addslashes ($isbn); $author = addslashes ($author); $title = addslashes ($title) ; $db = "sample"; $link = mysql_connect(); if (!$link) die ("Невозможно подключение к MySQL"); mysql_select_db ($db) or die ("Невозможно открыть $db"); $query = "INSERT INTO books VALUES ("" .$isbn."", "".$author."", "".$title."", "" .floatval($_POST["price"])."", "".intval($_POST["quantity"])."")"; $result = mysql_query ($query); if ($result) echo "Книга добавлена в базу данных."; mysql_close ($link); ?>

В примере 2.2 введенные строковые данные обработаны функцией addslashes() . Эта функция добавляет обратные слеши перед одинарными кавычками ("), двойными кавычками ("), обратным слешем (\) и null-байтом. Дело в том, что по требованиям систаксиса запросов баз данных такие символы дожны заключаться в кавычки.

Для определения количества записей в результате запроса используется функция mysql_num_rows() .

Все записи результата запроса можно просмотреть в цикле. Перед этим с помощью функции mysql_fetch_ для каждой записи получают ассоциативный массив.

В примере 3.1 приведена HTML-форма для поиска определенных книг в базе данных.

Пример 3.1

HTML-форма поиска книг
Ищем по:

Что ищем:

Результаты заполнения этой формы передаются в search_book.php.

Пример 3.2

Пожалуйста, вернитесь назад и закончите ввод"); $searchterm = addslashes ($searchterm); $link = mysql_pconnect (); if (!$link) die ("Невозможно подключение к MySQL"); $db = "sample"; mysql_select_db ($db) or die ("Невозможно открыть $db"); $query = "SELECT * FROM books WHERE " .$_POST["searchtype"]." like "%".$searchterm."%""; $result = mysql_query ($query); $n = mysql_num_rows ($result); for ($i=0; $i<$n; $i++) { $row = mysql_fetch_array($result); echo "

".($i+1). $row["title"]. "



"; } if ($n == 0) echo "Ничего не можем предложить. Извините"; mysql_close ($link); ?>

Альтернативный вариант

Программа поиска книг (файл search_book.php) Пожалуйста, вернитесь назад и закончите ввод"); $searchterm = addslashes ($searchterm); mysql_connect() or die ("Невозможно подключение к MySQL"); mysql_select_db ("sample") or die ("Невозможно открыть БД"); $result = mysql_query ("SELECT * FROM books WHERE ".$_POST["searchtype"]." like "%".$searchterm."%""); $i=1; while($row = mysql_fetch_array($result)) { echo "

".($i++) . $row["title"]."
"; echo "Автор: ".$row["author"]."
"; echo "ISBN: ".$row["ISBN"]."
"; echo "Цена: ".$row["price"]."
"; echo "Количество: ".$row["quantity"]."

"; } if ($i == 1) echo "Ничего не можем предложить. Извините"; mysql_close(); ?>

Итак, как работает архитектура Web-баз данных:

  1. Web-браузер пользователя выдает HTTP-запрос определенной Web-страницы. Например, пользователь, используя HTML-форму, ищет все книги о PHP. Страница обработки формы называется search_book.php.
  2. Web-сервер принимает запрос на search_book.php, извлекает этот файл и передает на обработку механизму PHP.
  3. PHP выполняет соединение с MySQL-сервером и отправляет запрос.
  4. Сервер принимает запрос к базе данных, обрабатывает его и отправляет результат (список книг) обратно механизму PHP.
  5. Механизм PHP завершает выполнение сценария, форматирует результат запроса в HTML. После этого результат в виде HTML возвращается Web-серверу.
  6. Web-сервер пересылает HTML в браузер, и пользователь имеет возможность просмотреть запрошенный список книг.

Использование механизма транзакций

Использование механизма транзакция на примере как передать деньги от одного человека другому

If(mysql_query ("BEGIN") && mysql_query ("UPDATE money SET amt = amt - 6 WHERE name = "Eve"") && mysql_query ("UPDATE money SET amt = amt + 6 WHERE name = "Ida"") && mysql_query ("COMMIT")){ echo "Успешно"; }else{ mysql_query ("ROLLBACK"); echo "Не успешно"; }

SELECT … FOR UPDATE

Если Вы запускаете несколько процессов, которые делают select запрос к одной и той же таблице, то они могут выбрать одну и ту же запись одновременно.

Чтобы избежать вышеупомянутой ситуации необходимо выполнить не просто SELECT запрос, а его расширенную версию, о которой многие и не подозревают: SELECT … FOR UPDATE.

Таким образом, при выполнении данного запроса, все затронутые записи в базе данных будут заблокированы до завершения сеанса работы с БД или до момента обновления данных записей. Другой скрипт не сможет выбрать заблокированные записи до тех пор, пока не наступит одно из упомянутых условий.

Однако не всё так просто. Вам нужно выполнить ещё несколько условий. Во-первых, ваша таблица должна быть создана на основе архитектуры InnoDB. В противном случае блокировка просто не будет срабатывать. Во-вторых, перед выполнением выборки необходимо отключить авто-коммит запроса. Т.е. другими словами автоматическое выполнение запроса. После того как вы укажите UPDATE запрос, необходимо будет ещё раз обратиться к базе и закоммитить изменения с помощью команды COMMIT:

РАБОТА С БАЗОЙ ДАННЫХ MySQL СРЕДСТВАМИ РНР

Лекция. Подготовлена Прохоровым В.С.


1. СОЕДИНЕНИЕ РНР-СЦЕНАРИЕВ с таблицами MySQL

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

При взаимодействии РНР и MySQL программа взаимодействует с СУБД посредством совокупности функций.

1.1 Соединение с сервером. Функция mysql_connect

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

resource mysql_connect(]])

Эта функция устанавливает сетевое соединение с базой данных MySQL, расположенной на хосте $server (по умолчанию это localhost, т.е. текущий компьютер) и возвращает идентификатор открытого соединения. Вся дальнейшая работа ведется именно с этим идентификатором. Все другие функции, принимающие этот идентификатор (дескриптор) в качестве аргумента, будут однозначно определять выбранную базу данных. При регистрации указывается имя пользователя $username и пароль $password (по умолчанию имя пользователя, от которого запущен текущий процесс – при отладке скриптов: root, и пустой пароль):

$dbpasswd = ""; //Пароль

//Выводим предупреждение

echo("

");

Переменные $dblocation, $dbuser и $dbpasswd хранят имя сервера, имя пользователя и пароль.

1.2 Разрыв соединения с сервером. Функция mysql_close

Соединение с MySQL – сервером будет автоматически закрыто по завершении работы сценария, либо же при вызове функции mysql_close

bool mysql_close ()

Эта функция разрывает соединение с сервером MySQL, и возвращает true при успешном выполнении операции и false в противном случае. Функция принимает в качестве аргумента дескриптор соединения с базой данных, возвращаемый функцией mysql_connect.

$dblocation = "localhost"; //Имя сервера

$dbuser = "root"; //Имя пользователя

$dbpasswd = ""; //Пароль

//Осуществляем соединение с сервером базы данных

//Подавляем вывод ошибок символом @ перед вызовом функции

$dbcnx = @ mysql_connect($dblocation, $dbuser, $dbpasswd);

if (!$dbcnx) //Если дескриптор равен 0, соединение не установлено

//Выводим предупреждение

echo("

B настоящий момент сервер базы данных не доступен, поэтому корректное отображение страницы невозможно.");

if (mysql_close($dbcnx)) //разрываем соединение

echo("Соединение с базой данных прекращено");

echo("He удалось завершить соединение");

1.3 Создание базы данных. Функция CREATE DATABASE

Команда - создание базы данных доступна только администратору сервера, и на большинстве хостингов ее нельзя выполнять:

CREATE DATABASE ИмяБазыДанных

Создает новую базу данных с именем имяБазыданных.

Пример работы с этой функцией:

@mysql_query("CREATE DATABASE $dbname");

Рекомендуется везде использовать апострофы ("SQL – команда") в качестве ограничителей строк, содержащих SQL – команды. Этим можно гарантировать, что никакая $ - переменная случайно не будет интерполирована (т.е. не заменится на свое значение), и увеличится безопасность скриптов.

Команда создания базы данных CREATE DATABASE доступна только суперпользователю, и на большинстве хостингов простому пользователю ее выполнить невозможно. Она доступна только администратору сервера.

Для экспериментов создадим базу данных testbase, выполнив SQL-запрос из командной строки. Для этого нужно войти в систему MySQL и ввести в командной строке MySQL:

mysql> create database testbase;

После этого следует набрать:

mysql>use testbase;

База данных создана:


1.4 Выбор базы данных. Функция mysql_select_db

До того как послать первый запрос серверу MySQL, необходимо указать, с какой базой данных мы собираемся работать. Для этого предназначена функция mysql_select_db:

bool mysql_select_db(string $database_name [,resource $link_identifier])

Она уведомляет PHP, что в дальнейших операциях с соединением $link_identifier будет использоваться база данных $database_name.

Использование этой функции эквивалентно вызову команды use в SQL-запросе, т. е. функция mysql_select_db выбирает базу данных для дальнейшей работы, и все последующие SQL-запросы применяются к выбранной базе данных. Функция принимает в качестве аргументов название выбираемой базы данных database_name и дескриптор соединения resource. Функция возвращает true при успешном выполнении операции и false - в противном случае:

//Код соединения с базой данных

if (! @mysql_select_db($dbname, $dbcnx))

//Выводим предупреждение

echo("

B настоящий момент база данных не доступна, поэтому корректное отображение страницы невозможно. ");

1.5 Обработка ошибок

Если в процессе работы с MySQL возникают ошибки (например, в запросе не сбалансированы скобки или же не хватает параметров), то сообщение об ошибке и ее номер можно получить с помощью описанных далее двух функций.

Важно аккуратно и своевременно использовать эти функции, потому что иначе отладка сценариев может усложниться.

● Функция:

int mysql_errno ()

возвращает номер последней зарегистрированной ошибки. Идентификатор соединения $link_identifier можно не указывать, если за время работы сценария было установлено только одно соединение.

● Функция:

string mysql_error()

возвращает не номер, а строку, содержащую текст сообщения об ошибке. Ее удобно применять в отладочных целях. Обычно mysql_error используют вместе с конструкцией or die (), например:

@mysql_connect("localhost", "user", "password")

or die("Ошибка при подключении к базе данных: ".mysql_error());

Оператор @, как обычно, служит для подавления стандартного предупреждения, которое может возникнуть в случае ошибки.

В последних версиях РНР предупреждения в MySQL-функциях по умолчанию не регистрируются.

1.6 Автоматизация подключения к MySQL. Файл (config.php )

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

Код, ответственный за подключение к MySQL рекомендуется выделить в отдельный файл, а затем подключать с помощью функции include к нужным скриптам.

Имеет смысл помещать функции для соединения, выбора и создания базы данных в тот же файл (config.php), где объявлены переменные с именем сервера $dblocation, именем пользователя $dbuser, паролем $dbpasswd и именем базы данных $dbname:

Листинг config.php:

//config.php код файла, содержащего параметры соединения с сервером и выбора базы данных

//выводит сообщения об ошибках соединения в браузер

$dblocation = "localhost"; //Имя сервера

$dbname = "вставить имя базы" //Имя базы данных: создаваемой или уже существующей

$dbuser = "root"; //Имя пользователя базы данных

$dbpasswd = ""; //Пароль

//Осуществляем соединение с сервером базы данных

//Подавляем вывод ошибок символом @ перед вызовом функции

$dbcnx=@mysql_connect($dblocation,$dbuser,$dbpasswd);

if (!$dbcnx) //Если дескриптор равен 0, соединение с сервером базы данных не установлено

//Выводим предупреждение

echo("

В настоящее время сервер базы данных не доступен, поэтому корректное отображение страницы невозможно.

");

//Создаем базу данных $dbname – это может делать только суперпользователь

//Если база данных уже существует, будет некритическая ошибка

@mysql_query("CREATE DATABASE if not exists $dbname’);

//Код соединения с базой данной: осуществляем однозначный выбор только что созданной базы или уже существующей базы данных

//Подавляем вывод ошибок символом @ перед вызовом функции

if(!@mysql_select_db($dbname, $dbcnx)) //Если дескриптор равен 0, соединение с базой данных не установлено

//Выводим предупреждение

echo("

В настоящее время база данных не доступна, поэтому корректное отображение страницы невозможно.

");

//Небольшая вспомогательная функция, которая выводит сообщение

//об ошибке в случае ошибки запроса к базе данных

function puterror($message)

echo("");


2. ВЫПОЛНЕНИЕ ЗАПРОСОВ К БАЗЕ ДАННЫХ

2.1 Создание таблицы. Функция CREATE TABLE:

CREATE TABLE Имя Таблицы (ИмяПоля тип, ИмяПоля тип,)

Этой командой в базе данных создается новая таблица с колонками (полями), определяемыми своими именами (ИмяПоля) и указанными типами. После создания таблицы в нее можно будет добавлять записи, состоящие из перечисленных в данной команде полей.

Листинг test_11.php. Программа, создающая новую таблицу в базе данных:

include "config.php";//Подключение к серверу и выбор базы данных

mysql_query("CREATE TABLE if not exists people

id INT AUTO_INCREMENT PRIMARY KEY,

or die("MySQL error: ".mysql_error());


Этот сценарий создает новую таблицу people с двумя полями. Первое поле имеет тип INT (целое) и имя id. Второе - тип TEXT (текстовая строка) и имя name.

Если таблица существует, сработает конструкция or die ().

Необязательная фраза if not exists, если она задана, говорит серверу MySQL, что он не должен генерировать сообщение об ошибке, если таблица с указанным именем уже существует в базе данных.

Помню те времена, когда я еще не знал что такое 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 скрипта .

При помощи 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:

Данный способ:

  1. удобнее;
  2. быстрее до 40 раз;
  3. повышена безопасность;
  4. есть новые возможности и функции;

Пример соединения с БД на 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 - это отдельная тема.

Эмуляторы