Работа с базой данных в php. Основы работы с MySQL в PHP Соединение с mysql в php

Мы научились подключаться серверу 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 MySQL в 2011 году для работы с базами данных все более широкое применение находят PDO или MySqli . Они обладают лучшей функциональностью (чем MySQL) и предлагают ООП (объектно-ориентированный интерфейс) API. Какой из них лучше, это тема для другой статьи, в этой статье мы попытаемся разобраться с основами работы с MySqli. Поэтому, без дальнейших предисловий, перейдем к рассмотрению соединения (connect), выбора (select), вставки (insert), обновления (update) и удаления (delete) записей (данных/документов/информации) посредством PHP MySqli. Надеюсь, что данная статья будет полезна при решении проблем, которые могут возникнуть при работе с PHP MySqli.

Установка MySqli

При использовании PHP версии 5.3.0 +, MySqli доступен по умолчанию; для более старых версий, чтобы сделать его доступным, надо включить php_mysqli.dll DLL внутри файла php.ini и отредактировать php.ini, раскоментировав строчку extension=php_mysqli.dll . В линуксе MySQLIi будет установлен автоматически при установке пакета PHP5 mysql. Более подробную информацию об установке в системах windows и linux можно найти .

Соединение с базой данных

MySqli предлагает два способа соединения с базой данных: процедурный и объектно-ориентированный. Рекомендуется использовать объектно-ориентированный. Процедурный похож на (старый) MySql, поэтому для новичков его использование, возможно, будет предпочтительней, стоит помнить, что им пользоваться не рекомендуется.

PHP

//процедурный стиль $mysqli = mysqli_connect("host","username","password","database_name"); //объектно-ориентированный стиль (рекомендуется) $mysqli = new mysqli("host","username","password","database_name");

Ниже показано открытие соединения с базой данных объектно-ориентированным способом. Этот способ будет использоваться и во всех приведенных ниже примерах.

PHP

connect_error) { die("Error: (". $mysqli->connect_errno .") ". $mysqli->connect_error); } ?>

Выбор (SELECT) результирующего ряда в виде ассоциативного массива

mysqli_fetch_assoc() : в приведенном ниже коде происходит извлечение результирующего ряда в виде ассоциативного массива. Возвращаемый массив содержит строки, полученные из базы данных, где имена столбцов будут являться ключом, используемым для доступа к внутренним данным. Как показана ниже, данные отображаются в виде HTML таблицы.

PHP

connect_error) { die("Error: (". $mysqli->connect_errno .") ". $mysqli->connect_error); } //MySqli Select Query $results = $mysqli->"; while($row = $results->fetch_assoc()) { print ""; print ""; print ""; print ""; print ""; print ""; print ""; } print "
".$row["id"]."".$row["product_code"]."".$row["product_name"]."".$row["product_desc"]."".$row["price"]."
"; // Frees the memory associated with a result $results->free(); // close connection $mysqli->close(); ?>

Выбор (SELECT) результирующего ряда в виде массива (ассоциативный, обычный, или в оба)

Фукнция fetch_array() : возвращает массив с объединенным функционалом mysqli_fetch_row и mysqli_fetch assoc . Эта функция является расширенной версией функции mysqli_fetch_row() ; для доступа к данным можно использовать как строку, так и числа.

PHP

connect_error) { die("Error: (". $mysqli->connect_errno .") ". $mysqli->connect_error); } //MySqli Select Query $results = $mysqli->query("SELECT id, product_code, product_desc, price FROM products"); print "fetch_array()) { print ""; print ""; print ""; print ""; print ""; print ""; print ""; } print "
".$row["id"]."".$row["product_code"]."".$row["product_name"]."".$row["product_desc"]."".$row["price"]."
"; // Frees the memory associated with a result $results->free(); // close connection $mysqli->close(); ?>

Выбор (SELECT) результирующего ряда в виде объекта

fetch_object() : чтобы получить результирующий набор в виде объекта, нужно воспользоваться MySqli fetch_object() . Атрибуты объекта будут отображать имена полей, найденных внутри результирующего набора.

PHP

connect_error) { die("Error: (". $mysqli->connect_errno .") ". $mysqli->connect_error); } //MySqli Select Query $results = $mysqli->query("SELECT id, product_code, product_desc, price FROM products"); print ""; while($row = $results->fetch_object()) { print ""; print ""; print ""; print ""; print ""; print ""; print ""; } print "
".$row->id."".$row->product_code."".$row->product_name."".$row->product_desc."".$row->price."
"; // close connection $mysqli->close(); ?>

Выбор (SELECT) одиночного значение

Одиночное значение получить из базы данных можно посредством fetch_object (метод Cameron Spear).

PHP

connect_error) { die("Error: (". $mysqli->connect_errno .") ". $mysqli->connect_error); } //chained PHP functions $product_name = $mysqli->query("SELECT product_name FROM products WHERE id = 1")->fetch_object()->product_name; print $product_name; //output value $mysqli->close(); ?>

Извлекаем (SELECT COUNT) количество строк в таблице

Иногда нужно узнать количество строк в таблице, особенно при нумерации страниц.

PHP

connect_error) { die("Error: (". $mysqli->connect_errno .") ". $mysqli->connect_error); } //get total number of records $results = $mysqli->query("SELECT COUNT(*) FROM users"); $get_total_rows = $results->fetch_row(); //hold total records in variable $mysqli->close(); ?>

Выбор (SELECT) с помощью шаблонов (prepared statements)

prepared statements - специальный инструмент СУБД, позволяющий ускорить последовательное выполнение повторяющихся запросов, построенных по одному и тому же шаблону.

Одной из особенностей MySqli является возможность использования уже написанных шаблонов: то есть запрос достаточно написать один раз, после чего его можно многократно исполнять с различными параметрами. Использование уже написанных шаблонов улучшает производительность для больших таблицах и сложных запросов. Для предотвращения попадания вредоносного кода анализ каждого запроса производится сервером отдельно.

Код ниже использует шаблон (Prepared statement), чтобы получать данные из базы данных. Заполнитель ? в запросе SQL играет роль маркера и будет замещен параметром, который, в свою очередь, может быть строкой, целым числом, double или blob. В нашем случае это строка $search_product .

PHP

$search_product = "PD1001"; //product id //create a prepared statement $query = "SELECT id, product_code, product_desc, price FROM products WHERE product_code=?"; $statement = $mysqli->prepare($query); //bind parameters for markers, where (s = string, i = integer, d = double, b = blob) $statement->bind_param("s", $search_product); //execute query $statement->execute(); //bind result variables $statement->"; //fetch records while($statement->fetch()) { print ""; print ""; print ""; print ""; print ""; print ""; } print "
".$id."".$product_code."".$product_desc."".$price."
"; //close connection $statement->close();

Тот же запрос с несколькими параметрами:

PHP

$search_ID = 1; $search_product = "PD1001"; $query = "SELECT id, product_code, product_desc, price FROM products WHERE ID=? AND product_code=?"; $statement = $mysqli->prepare($query); $statement->bind_param("is", $search_ID, $search_product); $statement->execute(); $statement->bind_result($id, $product_code, $product_desc, $price); print ""; while($statement->fetch()) { print ""; print ""; print ""; print ""; print ""; print ""; } print "
".$id."".$product_code."".$product_desc."".$price."
"; //close connection $statement->close();

Вставка (INSERT) записи

Запись ниже вставляет в таблицу новый ряд.

PHP

real_escape_string("P1234")."""; $product_name = """.$mysqli->real_escape_string("42 inch TV")."""; $product_price = """.$mysqli->real_escape_string("600")."""; //MySqli Insert Query $insert_row = $mysqli->query("INSERT INTO products (product_code, product_name, price) VALUES($product_code, $product_name, $product_price)"); if($insert_row){ print "Success! ID of last inserted record is: " .$mysqli->insert_id ."
"; }else{ die("Error: (". $mysqli->errno .") ". $mysqli->error); } ?>

Отрывок ниже вставляет те же значения посредством шаблонов (Prepared Statement). Как мы уже говорили, шаблоны чрезвычайно эффективны против SQL инъекция. Для приведенного примера их использование является оптимальным вариантом.

PHP

//values to be inserted in database table $product_code = "P1234"; $product_name = "42 inch TV"; $product_price = "600"; $query = "INSERT INTO products (product_code, product_name, price) VALUES(?, ?, ?)"; $statement = $mysqli->prepare($query); //bind parameters for markers, where (s = string, i = integer, d = double, b = blob) $statement->bind_param("sss", $product_code, $product_name, $product_price); if($statement->execute()){ print "Success! ID of last inserted record is: " .$statement->insert_id ."
"; }else{ die("Error: (". $mysqli->errno .") ". $mysqli->error); } $statement->close();

Вставка (INSERT) нескольких записей

Вставка нескольких рядов одновременно осуществляется путем включения ряда значений столбцов, где каждый ряд значений должен быть обнесен скобками и отделен от других запятой. Иногда нужно узнать, сколько записей было вставлено, обновлено или удалено, для этого можно воспользоваться mysqli_affected_rows .

PHP

//product 1 $product_code1 = """.$mysqli->real_escape_string("P1")."""; $product_name1 = """.$mysqli->real_escape_string("Google Nexus")."""; $product_price1 = """.$mysqli->real_escape_string("149")."""; //product 2 $product_code2 = """.$mysqli->real_escape_string("P2")."""; $product_name2 = """.$mysqli->real_escape_string("Apple iPad 2")."""; $product_price2 = """.$mysqli->real_escape_string("217")."""; //product 3 $product_code3 = """.$mysqli->real_escape_string("P3")."""; $product_name3 = """.$mysqli->real_escape_string("Samsung Galaxy Note")."""; $product_price3 = """.$mysqli->real_escape_string("259")."""; //Insert multiple rows $insert = $mysqli->query("INSERT INTO products(product_code, product_name, price) VALUES ($product_code1, $product_name1, $product_price1), ($product_code2, $product_name2, $product_price2), ($product_code3, $product_name3, $product_price3)"); if($insert){ //return total inserted records using mysqli_affected_rows print "Success! Total " .$mysqli->affected_rows ." rows added.
"; }else{ die("Error: (". $mysqli->errno .") ". $mysqli->error); }

Обновление (Update)/удаление (Delete) записей

Принцип обновление и удаление записей тот же. Достаточно заменить строку запроса на MySql update или delete (не понял, сам смотри).

PHP

//MySqli Update Query $results = $mysqli->query("UPDATE products SET product_name="52 inch TV", product_code="323343" WHERE ID=24"); //MySqli Delete Query //$results = $mysqli->query("DELETE FROM products WHERE ID=24"); if($results){ print "Success! record updated / deleted"; }else{ print "Error: (". $mysqli->errno .") ". $mysqli->error; }

Обновление с помощью шаблонов (prepared statements)

Пример обновления записи с помощью шаблонов (prepared statements) приведен ниже.

PHP

$product_name = "52 inch TV"; $product_code = "9879798"; $find_id = 24; $query = "UPDATE products SET product_name=?, product_code=? WHERE ID=?"; $statement = $mysqli->prepare($query); //bind parameters for markers, where (s = string, i = integer, d = double, b = blob) $results = $statement->bind_param("ssi", $product_name, $product_code, $find_id); if($results){ print "Success! record updated"; }else{ print "Error: (". $mysqli->errno .") ". $mysqli->error; }

Удаление старых записей

Удалению подвергаются все записи, находящиеся на сервере больше 1 дня; количество дней можно задать самому.

PHP

//MySqli Delete Query $results = $mysqli- (NOW() - INTERVAL 1 DAY)"); if($results){ print "Success! deleted one day old records"; }else{ print "Error: (". $mysqli-Заключение

Вне сомнения, MySqli существенно лучше стандартного MySql расширения PHP, хотя принципы их работы довольно схожи. Надеюсь, приведенная выше информация окажется полезной при создании и переносе проектов в будущем. Для удобства ниже была реализована возможность скачать файлы примеров. Это можно сделать, нажав на кнопку download.

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

Свою базу я назвал "phptest". После нажатие на кнопку "Создать" Вас автоматом должно перекинуть в созданную Вами базу данных.

Создаем таблицу в базе данных

В этой процедуре тоже ничего сложного нет. Давайте создадим таблицу в которой мы будем хранить заголовок наших статей и непосредственно сам текст:

Как Вы могли заметить в количестве полей я поставил цифру 3, почему? Ведь нам нужно создать два поля, под заголовок и текст. Дело в том, что у таблицы в базе данных должно быть одно дополнительное поле. Для чего? Это поле представляет собой поочередный идентификационный номер, (то есть мы как бы считаем наши строки в таблице) таким образом мы получаем у каждой строчки таблицы свой неповторимый номер. Это пригодится для поиска нужной нам строки в базе данных. Поле это обычно называют id и выставляют ему AUTO_INCREMENT (покажу ниже где он выставляется). AUTO_INCREMENT позволяет присваивать каждой сточки свой неповторимый номер, тем самым Вы в таблице базы данных не встретите запись с одинаковым номером!

после заполнение имени и количество полей, жмет "ОК" попадаем на страницу создание полей. Признаюсь Вам я не особо понимаю что делаю при создание полей, но мне это не мешает с ними работать Заполним вот так:

И заполните два нужных нам поля:

Почему только два? Потому что первое поле id будет заполняться автоматически за счет AUTO_INCREMENT. Жмем "ОК". Теперь во вкладке "Обзор" можно увидеть созданную нами строчку в таблице:

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

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

Вывод записей из базы данных

Начнем с этого, так как при создание какого либо проекта необходимо наглядно видеть процесс, а без вывода это очень сложно сделать (я буду работать с файлом test.php, не удивляйтесь когда увидите ссылки в коде на этот файл). Как будем выводить? Ну для начала нам необходимо подключиться к базе данных, после циклом do while (Изучаем PHP - Циклы) мы вытащим записи из базы данных. Приступим

  • Подключение к базе данных

Как осуществляется подключение? Внимание на синтаксис:

mysql_select_db(Название БД, mysql_connect(Сервер,Имя пользователя БД,Пароль пользователя БД));

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






//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)

Сервер, пользователь и пароль был создан по умолчанию (в данном случае можно сказать, что почти все данные нам предоставляет хостер). Из своих данных я лишь указал имя базы данных. Кстати, это php код, и поэтому должен находиться в спец скобках ()

  • Вывод данных

Нам необходимо вывести данные из таблицы page. Внимание на синтаксис вывода:

$result = mysql_query("SELECT Что вытаскиваем FROM имя таблицы в БД");

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

Вторая строчка помещает все найденное в переменную...

ВНИМАНИЕ есть пару моментов которые я бы хотел пояснить. Давайте решим несколько задач:

  • Нам необходимо вытащить все поля из таблицы.

Как вытащить все поля из таблицы page? вот так:

$result = mysql_query("SELECT * FROM page");
$myrow = mysql_fetch_array($result);

Вы могли заметить, что я поставил звездочку (*) после SELECT. Звездочка означает, что мне необходимо извлечь все поля из таблицы

  • Нам необходимо вытащить только одно поле из таблицы

Как вытащить только поле text из таблицы? вот так:

$result = mysql_query("SELECT text FROM page");
$myrow = mysql_fetch_array($result);

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

  • Нам необходимо вытащить поля не из все таблицы, а только из одной строчки

Как вытащить все поля из первой строчки? Нам известно что первая строчка имеет id равную единице, воспользуемся этими знаниями:

После SELECT я через запятую пояснил какие поля необходимо извлечь, после добавил новую строчку WHERE (что означает "где") id равен 1. Таким образом я вытаскиваю нужные мне поля из строки где id равен единице

Ну что ж, приступим к созданию вывода наших статей? Выводить будем только заголовки, приступим:


$myrow = mysql_fetch_array($result);

do
{
echo "".$myrow."
";
}

Что мы сделали? Мы вытащили из таблицы два поля, id и title. Далее запустили цикл do while (Изучаем PHP - Циклы) и сформировали ссылки, с помощью данных которые вывели из БД. Данные хранятся в переменной $myrow, эта переменная является массивом , ключами к массиву являются имена наших полей в базе данных. Вот что получилось:

Вывод заголовков есть, теперь давайте организуем вывод полных сообщений при щелчке мыши по ссылке с заголовком. Для того что бы это осуществить в одном файле, добавим условия if(){}:

//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)
$nameDB = "phptest";//Название БД
$nameSERVER = "localhost";//Сервер
$nameUSER = "root";//Имя пользователя БД
$passUSER = "";//Пароль пользователя БД
mysql_select_db($nameDB, mysql_connect($nameSERVER,$nameUSER,$passUSER));
//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)

//ВЫВОД ЗАГОЛОВКОВ
if(!isset($_GET["id"]))
{
$result = mysql_query("SELECT id,title FROM page");
$myrow = mysql_fetch_array($result);

do
{
echo "".$myrow."
";
}
while ($myrow = mysql_fetch_array($result));
}
//ВЫВОД ЗАГОЛОВКОВ

//ВЫВОД ПОЛНОГО ТЕКСТА
if(isset($_GET["id"]))
{

$myrow = mysql_fetch_array($result);

echo $myrow;
}
//ВЫВОД ПОЛНОГО ТЕКСТА
?>

Я добавил два условия. Список с заголовками мы будем видеть только в случае если не существует глобальная переменная $_GET["id"]. Полный же текст мы увидим только если эта переменная существует. При этом из базы данных мы будем выводить лишь одну нужную нам запись. Вот, что мы получили:

Теперь думаю пора научится добавлять новые строки в таблицу.

Добавление данных в БД

Добавление начнем с создание формы , вот кусочек кода который необходимо добавить в конец нашего файла:

//ФОРМА ДОБАВЛЕНИЕ ЗАПИСЕЙ
if(isset($_GET["add"]))
{
echo "







";
}
//ФОРМА ДОБАВЛЕНИЕ ЗАПИСЕЙ

Эта форма появиться только в случае если будет существовать глобальная переменная $_GET["add"], поэтому где-нить в низу необходимо вставить ссылку на добавление новой статьи. Лучше всего это сделать в коде вывода заголовков, так же можно отредактировать условие вывода наших заголовков вот так:

//ВЫВОД ЗАГОЛОВКОВ
if(!isset($_GET["id"]) AND !isset($_GET["add"]))
{
$result = mysql_query("SELECT id,title FROM page");
$myrow = mysql_fetch_array($result);

do
{
echo "".$myrow."
";
}
while ($myrow = mysql_fetch_array($result));

echo "


Добавить пост";
}
//ВЫВОД ЗАГОЛОВКОВ

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

$result = mysql_query("INSERT INTO имя таблицы в БД (поле 1 БД,поле 2 БД) VALUES ("данные 1","данные 2")");

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

//ДОБАВЛЕНИЕ ЗАПИСЕЙ

{

header("location: test.php");
exit;
}
//ДОБАВЛЕНИЕ ЗАПИСЕЙ

Условием является глобальная переменная $_POST то есть если мы заполнили форму, нажали на кнопку "Добавить пост" то сработает наше условие. В поле title запишутся данные из глобальной переменной $_POST, а в поле text - $_POST. Далее сработает строчка header("location: test.php") Она позволяет перенаправить пользователя на другую страницу, в данном случае этой страницей будет test.php. А строчка exit; прерывает выполнение остальных скриптов. Вот что получилось:

Редактирование данных в БД

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

//ВЫВОД ПОЛНОГО ТЕКСТА
if(isset($_GET["id"]))
{
$result = mysql_query("SELECT text FROM page WHERE id="$_GET"");
$myrow = mysql_fetch_array($result);

echo $myrow;
echo "


Редактировать пост";
}
//ВЫВОД ПОЛНОГО ТЕКСТА


if(isset($_GET["edd"]))
{

$myrow = mysql_fetch_array($result);

Echo "








";
}
//ФОРМА РЕДАКТИРОВАНИЕ ЗАПИСЕЙ

Я добавил этот кусочек кода после формы добавление записей. Эта форма почти аналогична форме добавление постов. Как Вы могли заметить, я переделал атрибуты name, и добавил атрибут value. В этот атрибут я поместил данные которые вывел из базы данных. Так же тут присутствует невидимое поле. Оно нужно для того чтобы переслать идентификатор записи в файл обработчик.

Теперь для того что бы при выводе этой формы на экране не было списка заголовков, исправим условие:

//ВЫВОД ЗАГОЛОВКОВ

{
$result = mysql_query("SELECT id,title FROM page");
$myrow = mysql_fetch_array($result);

do
{
echo "".$myrow."
";
}
while ($myrow = mysql_fetch_array($result));

echo "


Добавить пост";
}
//ВЫВОД ЗАГОЛОВКОВ

Пришло время узнать как редактируются записи в базе данных. Вот синтаксис:

Теперь напишем обработчик. Вот кусочек кода который я добавил сразу после обработчика добавление записей:

//РЕДАКТИРОВАНИЕ ЗАПИСЕЙ

{

header("location: test.php");
exit;
}
//РЕДАКТИРОВАНИЕ ЗАПИСЕЙ

По условию видно, что обработчик запустится только в случае если мы нажали на кнопку "редактировать пост". Далее идет обновление базы данных. В поле title мы поместим значение глобальной переменной $_POST а в поле text - $_POST. Редактировать будем строку у которой id равен глобальной переменной $_POST. После мы перенаправляем пользователя обратно к списку заголовков:

Удаление записей из БД

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

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

//ВЫВОД ПОЛНОГО ТЕКСТА
if(isset($_GET["id"]))
{
$result = mysql_query("SELECT text FROM page WHERE id="$_GET"");
$myrow = mysql_fetch_array($result);

echo $myrow;
echo "


Редактировать пост";
echo "
Удалить пост";
}
//ВЫВОД ПОЛНОГО ТЕКСТА

Результат работы

Вот полный код сегодняшнего поста:

//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)
$nameDB = "phptest";//Название БД
$nameSERVER = "localhost";//Сервер
$nameUSER = "root";//Имя пользователя БД
$passUSER = "";//Пароль пользователя БД
mysql_select_db($nameDB, mysql_connect($nameSERVER,$nameUSER,$passUSER));
//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)

//ДОБАВЛЕНИЕ ЗАПИСЕЙ
if(isset($_POST["title_post"]) AND isset($_POST["text_post"]))
{
$result = mysql_query("INSERT INTO page (title,text) VALUES ("$_POST","$_POST")");
header("location: test.php");
exit;
}
//ДОБАВЛЕНИЕ ЗАПИСЕЙ

//РЕДАКТИРОВАНИЕ ЗАПИСЕЙ
if(isset($_POST["title_post_edd"]) AND isset($_POST["text_post_edd"]))
{
$result = mysql_query ("UPDATE page SET title="$_POST", text="$_POST" WHERE id="$_POST"");
header("location: test.php");
exit;
}
//РЕДАКТИРОВАНИЕ ЗАПИСЕЙ

//УДАЛЕНИЕ ЗАПИСЕЙ
if(isset($_GET["del"]))
{
$result = mysql_query ("DELETE FROM page WHERE id="$_GET"");
header("location: test.php");
exit;
}
//УДАЛЕНИЕ ЗАПИСЕЙ

//ВЫВОД ЗАГОЛОВКОВ
if(!isset($_GET["id"]) AND !isset($_GET["add"]) AND !isset($_GET["edd"]))
{
$result = mysql_query("SELECT id,title FROM page");
$myrow = mysql_fetch_array($result);

do
{
echo "".$myrow."
";
}
while ($myrow = mysql_fetch_array($result));

echo "


Добавить пост";
}
//ВЫВОД ЗАГОЛОВКОВ

//ВЫВОД ПОЛНОГО ТЕКСТА
if(isset($_GET["id"]))
{
$result = mysql_query("SELECT text FROM page WHERE id="$_GET"");
$myrow = mysql_fetch_array($result);

echo $myrow;
echo "


Редактировать пост";
echo "
Удалить пост";
}
//ВЫВОД ПОЛНОГО ТЕКСТА

//ФОРМА ДОБАВЛЕНИЕ ЗАПИСЕЙ
if(isset($_GET["add"]))
{
echo "







";
}
//ФОРМА ДОБАВЛЕНИЕ ЗАПИСЕЙ

//ФОРМА РЕДАКТИРОВАНИЕ ЗАПИСЕЙ
if(isset($_GET["edd"]))
{
$result = mysql_query("SELECT * FROM page WHERE id="$_GET"");
$myrow = mysql_fetch_array($result);

Echo "








";
}
//ФОРМА РЕДАКТИРОВАНИЕ ЗАПИСЕЙ
?>

Заключение

Довольно сложный получился материал. Но! Вы могли заметить, что я использовал лишь ту информацию которую давал ранее . А это значит, что имея эти знание, можно создавать простейшие проекты на php! Если Вы все это освоили, то можете с гордостью заявить, что вы начинающий программист! Ну что ж, теперь Вы вполне можете приступить к созданию свой первой cms . Если есть какие то вопросы, а они скорее всего есть, задавайте, помогу чем смогу! Удачи Вам, на сегодня у меня все!

P.S.: Что такое mdf файл? Чем его открыть? Как его открыть? На эти и многие вопросы можно найти ответ на voprosi4ek.ru

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

В качестве примера взят сервер баз данных MySQL (полагаю, что освоив его, вы без большого труда освоите и другие. Когда-нибудь я напишу и о них, если сам освою:).

Первый разговор пойдет о функциях PHP, используемых для работы с MySQL. Итак, начнём.

1. Администрирование базы данных

Способы администрирования БД в порядке убывания удобства:

  • phpMyAdmin (весьма рекомендую!)
  • Написать скрипт, который бы передёргивал базу (см. пример)
  • mysql.exe в пакете mysql
  • mysql_manager.exe (там, вроде, как-то можно, только на грани шаманства)

Особенно рекомендую первый способ. С ним не придётся изучать запросы ALTER TABLE, ADD COLUMN и т.п. Я их не знаю до сих пор. Тем более, что "такие вопросы, товарищ посол, с кондачка не решаются" - когда вам понадобится автоматически изменить структуру базы или таблицы? Пару слов о втором способе. Это так сказать обходная технология, которую я применял, не зная про phpMyAdmin и утилиту mysqldump. В скрипте пишутся команды, удаляющие базу и создающие её вновь. Когда-то помогало, но вообще это, ещё раз скажу, обходная технология, "подпорка".

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

2. Соединение с сервером БД

Осуществляется при помощи функции mysql_connect: $connect = mysql_connect(<хост>, <логин>, <пароль>); По умолчанию, на mysql-сервере в таблице пользователей есть пользователь root, который может иметь доступ только с localhost-а, то бишь с того же самого компьютера, где стоит сервер mysql. ВНИМАНИЕ! "Иметь доступ с localhost-а" значит, что доступ имеет ваш скрипт PHP, а вы можете обращаться к нему с любого другого компьютера.

Что происходит, когда мы вызываем функцию mysql_connect? С началом выполнения вашего скрипта, php выделяет в своей памяти место для информации о нём и его переменных. В информации о выполняемом скрипте хранится, в том числе, и информация о соединениях с базами данных. Переменная $connect - грубо говоря указатель на место, где данная информация хранится. Переменная эта точно такая же, как и остальные - если вы используете функции, то надо объявлять глобальные переменные, чтобы обратиться к ней.

Почему вообще используется переменная? Это на случай, если для работы вам необходимо использовать несколько серверов баз данных (или, например, для обеспечения бОльшей безопасности вы используете разные логины, у которых могут быть разные привилегии). В таких случаях в каждом запросе нужна определённость, по какому, так сказать, каналу идёт команда. Но если вы используете только одно соединение, указывать его в параметрах функций запросов (о них - ниже) не нужно - php находит первое (и в данном случае единственное) установленное соединение и использует его.

Механизм работы функций запросов к БД такой же, как и у функции соединения: функции передаются параметры запроса и (если надо) соединения, а результат записывается в переменную:

$result = mysql_db_query(string база данных, string запрос [, переменная соединения]);

$result = mysql_query(string запрос [, переменная соединения]);

ВНИМАНИЕ! Чтобы использовать функцию mysql_query, в которой база данных не указывается, надо предварительно выбрать используемую базу данных:

mysql_select_db(string база данных);

Теперь у нас есть переменная $result. Это указатель на результат выполнения запроса. Там есть сколько-то строк таблицы. Получить эти строки можно через функции mysql_fetch_row и mysql_fetch_array:

Echo "

"; while ($row = mysql_fetch_array($result)) echo ""; echo "
", $row["field1"], "", $row["field2"], "
";

Функция mysql_fetch_array выдаёт в указанную переменную (в данном случае $row) массив, индексы которого - имена полей (причём, если вы в списке полей запроса пишете table.field, то индекс массива будет field). mysql_fetch_row выдаёт массив, индексы которого - числа, начиная с 0.

Какой функцией лучше пользоваться? Если вы запрашиваете звёздочку, т.е. все поля таблицы, а выводить поля нужно в определённой последовательноси (когда, например, у таблицы рисуется шапка), лучше пользоваться mysql_fetch_array. Если вы запрашиваете одно-два-три поля, чётко зная их последовательность, можно делать mysql_fetch_row - это уменьшит объем кода программы.

Это команды DELETE и UPDATE. Подобные запросы - в "правах" такие же, как и SELECT, поэтому отправка команды серверу происходит тем же способом - mysql_query (mysql_db_query). Но в данном случае функция не возвращает результата:

$result = mysql_query("SELECT * FROM sometable"); но mysql_query("DELETE FROM sometable WHERE id=...");

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

5. Обработка ошибок запросов

Сообщение о последней ошибке можно получить через функцию mysql_error:

echo "Ошибка базы данных. MySQL пишет:", mysql_error();

Если результат функции пишется в переменную, можно проверить её:

$result = mysql_query($request); if (!$result) echo "Ошибка базы данных. MySQL пишет:", mysql_error(); else { echo "

"; while ($row = mysql_fetch_array($result)) echo ""; echo "
", $row["field1"], "", $row["field2"], "
"; };

Если в переменную не пишем, то так.

Windows 7