Php примеры работы с базами

Вечная тема с PHP и MySQL

Всем привет! Наверняка каждый из тех, кто много и постоянно пишет на PHP сталкивался с вопросом оптимизации и упрощения запросов в базы данных MySQL. Кто-то написал уже себе удобные классы/процедуры, кто-то нашел что-нибудь на просторах сети.

Поскольку у меня скрипты на PHP все больше и больше начинают сворачиваться к одной задаче — выборке из базы данных и передаче этих данных клиентским Java-скриптам, я себе облегчил участь тем, что создал удобный (для меня, конечно) класс по работе с базами данных MySQL.

Сразу оговорюсь — встроенный класс mqsli достаточно удобен и функционален, но сталкиваясь день ото дня с одними и теми же вопросами было бы странно немного не облегчить свою участь.

Вашему вниманию предлагается класс exDBase, это по сути своей оболочка для класса mysqli. Сразу оговорюсь — я программист начинающий, и готов в комментариях или личных сообщениях получить массу критики за написанный код. Я не очень владею RegExp например, которые сильно бы упростили код, возможно есть и другие претензии. Но, тем не менее…

Вся библиотека содержится в одном файле — exdbase.php. Это файл содержит описание класса exDBase. Чтобы начать работать, нужно просто, скачав файл, прописать такую строчку:

Читайте также:  Python import os getcwd

Для начала создадим экземпляр класса, это очень просто:

$DB = new exDBase (DB_HOST, DB_USER, DB_PASSWORD, DB_NAME); if ($DB->error) echo "Ошибка соединения: $DB->error";

В свойстве $DB->error всегда будет ошибка последней операции (если была ошибка), либо оно будет пустым.

Формат практически идентичен созданию экземпляра класса mysqli. Естественно, вместо указанных в примере констант нужно подставить реальные значения для хоста, имени пользователя, пароля и имени базы данных.

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

ID — уникальный номер, автоинкремент
NAME — имя клиента
AGE — возраст клиента
AMOUNT — сумма покупок
BLOCKED — булева переменная, заблокирован клиент или активен
SETTINGS — личные параметры, мы их храним в формате JSON

Запрос в базу данных

Давайте получим все записи из таблицы ‘clients‘. Для этого существует метод fetchArray.

$res = $DB->fetchArray ('clients'); // получаем все записи в виде массива ассоциативных массивов if ($res) foreach ($res as $client) echo print_r ($client, true); // выдаем все записи на экран

А если мы хотим получить только первую запись запроса? Для этого есть метод fetchFirst.

$res = $DB->fetchFirst ('clients'); // получаем первую запись в виде ассоциативного массива if ($res) echo print_r ($client, true); // выдаем первую запись на экран

Но, нам вряд ли понадобится получать все записи из таблицы, всегда есть условия отбора (поле WHERE в команде SELECT). Как нам поступить? Да очень просто. Это второй аргумент методов fetchArray или fetchFirst.

Допустим, что мы хотим выбрать всех клиентов с именем John. В нашем классе это можно сделать двумя способами.

Первый — просто задать условие строкой вида «NAME = ‘John’»

$res = $DB->fetchArray ('clients', "NAME = 'John'");

Второй — задать условие массивом:

$res = $DB->fetchArray ('clients', array ("NAME" => "John"));

А если есть еще условия? Например, возраст должен равняться 30 лет? Легко:

$res = $DB->fetchArray ('clients', array ("NAME" = "John", "AGE" => 30));

Таким образом можно объединять несколько условий поиска. Но равенство… А если мы хотим найти всех клиентов с именем John, которые старше 25 лет? Тут на помощь приходят специальные префиксы:

$res = $DB->fetchArray ('clients', array ("NAME" = "John", ">=AGE" => 25));

Кроме «>=» вы можете использовать: «>», «», «! NAME» = «John», «>=AGE» => 25), array («NAME», «AGE»));

Четвертый и последний параметр методов выборки fetchArray и fetchFirst это порядок сортировки. Он также задается либо строкой (типа: «ID ASC, NAME DESC») либо массивом array («ID» => «ASC», «NAME» => «DESC»).

$res = $DB->fetchArray ('clients', array ("NAME" = "John", ">=AGE" => 25), array ("NAME", "AGE"), array ("ID" => "ASC", "NAME" => "DESC"));

Ну, заканчивая с получением данных вы спросите — а как лимитировать выборку? Например, нужны только 10 первых записей?

Это делается методом setLimit(), вот так:

$DB->setLimit (10); $res = $DB->fetchArray ('clients', "NAME = 'John'");

Метод setLimit() работает только на один запрос, после этого лимиты обнуляются.

Вставка новых данных

Для записи новых данных существует метод insert().

$id = $DB->insert ('clients', array ("NAME" => 'Peter', "AGE" => 27, "AMOUNT" => 1000.25));

Он возвращает значение первичного ключа автоинкремента (если такой задан в таблице). В нашем случае он вернет ID вставленной записи.

Обновление данных

Обновление данных осуществляется методом update().

$DB->update ('clients', array ("NAME" => 'Peter'), array ("AGE" => 30, "AMOUNT" => 2000.25));

Мы обновили все записи где имя (поле NAME) — это ‘Peter’. Второй аргумент метода — это условие выбора, точно в таком же формате как WHERE для SELECT. Ну, а третий аргумент метода — это сами данные. Теперь у всех таких записей с именем ‘Peter’ возраст будет равен 30, а сумма — 2000.25.

Удаление данных

Если вы уже поняли логику работы библиотеки, то удаление дастся очень просто. Метод называется delete().

$DB->delete ('clients', array ("NAME" => 'Peter'); // удалить все записи с именем 'Peter' $DB->delete ('clients', array (">AGE" => '20'); // удалить все записи с возрастом больше 20.

Вот такой вот первый краткий экскурс в библиотеку exDBase. Существует еще целый ряд других, более продвинутых функций, но об этом в другой раз.

Источник

PHP: работа с БД MySQL

PHP: работа с БД MySQL

Базы данных используются для удобного хранения информации, а также для её структурирования. Они являются очень важной вещью для создания динамических веб-сайтов.

Их используют для:

  1. Регистрации и авторизации на сайте (хранят регистрационные данные).
  2. Хранения статей и комментариев к ним.
  3. Организации поиска по веб-сайту.

В этой статье мы научимся вставлять, изменять, получать и защищать данные из БД MySQL, используя PHP.

Есть несколько вариантов подключения к базе данных MySQL, но самые лучшие варианты — mysqli и PDO .

Основная разница в том, что PDO может работать с огромным количеством баз данных: MySQL, Cubrid, Oracle, SQlite и так далее. А mysqli может работать только с MySQL.

В своей статье я покажу, как работать с PDO.

Примеры показывать буду на локальном сервере ( xampp ).

Создание БД и таблиц

Создать БД можно из панели управления хостингом, если есть такая возможность, а если нет, то из phpMyAdmin. Сравнение ставим utf8_general_ci.

Заходим в БД и создадим таблицу users , которую будем использовать для примера. Она будет включать колонки: ID(int) , login(varchar) и pass(varchar) . ID будет первичным ключом, а также будет иметь галочку напротив AI(auto increment), что позволит каждой новой записи присваивать id на 1 больше, чем у прошлой записи. Кроме этого, не забываем проставить длину varchar ’ам и поставить сравнение utf8_general_ci к полям login и pass .

База данных

Теперь мы имеем готовую БД и таблицу для работы с ней.

Подключение к БД с помощью PHP

Создаём файл index.php и прописываем:

 $user = 'root'; // пользователь $password = ''; // пароль $db = 'mydb'; // название бд $host = 'localhost'; // хост $charset = 'utf8'; // кодировка // Создаём подключение $pdo = new PDO("mysql:host=$host;dbname=$db;cahrset=$charset", $user, $password); ?>

Мы создали подключение к БД. Подключение от PDO не нужно закрывать, оно само закрывается, когда скрипт завершает свою работу.

Выборка данных

Здесь я сделаю небольшое отступление. Выбирать данные можно:

PDO::FETCH_ASSOC — возвращает массив с названиями столбцов в виде ключей.

PDO::FETCH_OBJ — возвращает анонимный объект со свойствами, соответствующими именам столбцов.

Fetch() — каждый раз извлекает следующую строку.

Продолжаем скрипт:

// Создаём запрос $query = $pdo -> query('SELECT * FROM users'); // Перебираем способом ассоциативного массива while ($row = $query->fetch(PDO::FETCH_ASSOC))  echo $row['login']."
";
>

Здесь мы обращаемся к массиву $row по индексу login.

В данном случае код выведет логин всех, кто есть в таблице.

// Перебираем способом объекта while ($row = $query->fetch(PDO::FETCH_OBJ))  echo $row->login."
";
>

Здесь мы обращаемся к объекту $row по login.

В данном случае код выведет также логин всех, кто есть в таблице.

Выборка данных по параметру + защита

Мы можем выбирать определённые данные из таблицы. Например, мы можем выбрать все записи, где pass = 123, и тому подобные.

Вот первый пример выборки по логину + защита:

$login = 'Andre'; // Подставиться вместо знака вопроса $sql = 'SELECT * FROM users WHERE login = ?'; // Формируем запрос $query = $pdo -> prepare($sql); // Возвращает объект $query -> execute([$login]); // В скобках указываем то, что заменит знак вопроса. // Также перебираем массив, но теперь в массиве только те строки, где login = Andre while ($row = $query->fetch(PDO::FETCH_ASSOC))  echo $row['id']; > 

Можно указать несколько вопросительных знаков, а в execute перечислить замены для них через запятую.

Вот второй пример выборки по логину + защита:

$login = 'Andre'; // Подставится вместо :login // Формируем запрос с помощью ключа $sql = 'SELECT * FROM users WHERE login = :login'; $query = $pdo -> prepare($sql); // Возвращает объект // В кавычках нужно указать ключ, который мы указали в запросе. // А после передать значение, которое должно подставится. $query -> execute(['login' => $login]); // Также перебираем массив, но теперь в массиве только те строки, где login = Andre while ($row = $query->fetch(PDO::FETCH_ASSOC)) echo $row['id']; >

Можно указать несколько ключей, а в execute перечислить замены для них через запятую в формате ‘ключ’ => значение .

Второй способ использовать предпочтительнее, так как читаемость и понятность кода более понятна, чем в первом примере, но использовать можно два способа.

Вставка данных по параметру + защита

$login = 'Lorem'; // Подставиться вместо :login $pass = 444; // Подставиться вместо :pass // Формируем запрос с помощью ключей $sql = 'INSERT INTO users (login, pass) VALUES (:login, :pass)'; $query = $pdo -> prepare($sql); // Возвращает объект // В кавычках нужно указать ключи, которые мы указали в запросе. // А после передать значение, которое должно подставится. $query -> execute(['login' => $login, 'pass' => $pass]);

Теперь можем проверить таблицу. Видим, что всё сработало правильно.

Обновление данных по параметру + защита

$id = 7; // Подставиться вместо :id $pass = 222; // Подставиться вместо :pass // Формируем запрос с помощью ключей $sql = 'UPDATE users SET pass = :pass WHERE '; $query = $pdo -> prepare($sql); // Возвращает объект // В кавычках нужно указать ключи, которые мы указали в запросе. // А после передать значение, которое должно подставится. $query -> execute(['pass' => $pass, 'id' => $id]);

Теперь можем проверить таблицу. Видим, что всё сработало правильно.

Заключение

Как видите, работать с PDO довольно легко. Теперь вы сами можете создавать веб-сайты с базами данных.

Надеюсь, что вам понравилась статья, и вы получили новые знания.

Всем спасибо за внимание!

Источник

Php примеры работы с базами

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

Пример #1 Пример работы с MySQL

// Соединяемся, выбираем базу данных
$link = mysql_connect ( ‘mysql_host’ , ‘mysql_user’ , ‘mysql_password’ )
or die( ‘Не удалось соединиться: ‘ . mysql_error ());
echo ‘Соединение успешно установлено’ ;
mysql_select_db ( ‘my_database’ ) or die( ‘Не удалось выбрать базу данных’ );

// Выполняем SQL-запрос
$query = ‘SELECT * FROM my_table’ ;
$result = mysql_query ( $query ) or die( ‘Запрос не удался: ‘ . mysql_error ());

// Выводим результаты в html
echo «

\n» ;
while ( $line = mysql_fetch_array ( $result , MYSQL_ASSOC )) echo «\t \n» ;
foreach ( $line as $col_value ) echo «\t\t

\n» ;
>
echo «\t

\n» ;
>
echo «

$col_value

\n» ;

// Освобождаем память от результата
mysql_free_result ( $result );

// Закрываем соединение
mysql_close ( $link );
?>

User Contributed Notes 1 note

Be aware that if you are trying to foreach the associative array returned by mysql_fetch_array() with MYSQL_ASSOC or mysql_fetch_assoc(), you have to ensure the return value that is used in foreach structure is exactly a array rather than a FALSE value.

Or you might encounter the warning below:
Warning: Invalid argument supplied for foreach()

Here is an example (assume that $result have already stored the return value from mysql_query()):

If you have some block of code like:

// Printing results in HTML
echo «

\n» ;
while ( $line = mysql_fetch_array ( $result , MYSQL_ASSOC )) echo «\t \n» ;
foreach ( $line as $col_value ) echo «\t\t

\n» ;
>
echo «\t

\n» ;
>
echo «

$col_value

\n» ;

?>

If this is the case, you should use the code below instead:

// Check ahead, before using it
if ( mysql_num_rows ( $result ) > 0 ) // Printing results in HTML
echo «

\n» ;
while ( $line = mysql_fetch_array ( $result , MYSQL_ASSOC )) echo «\t \n» ;
foreach ( $line as $col_value ) echo «\t\t

\n» ;
>
echo «\t

\n» ;
>
echo «

$col_value

\n» ;
>

Источник

Оцените статью