Раздел: PHP Cookbook

Обновление кортежа таблицы MySQL

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

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

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

Итак. Для работы скрипта нам нужно знать только параметры подключения к базе данных и на какое значение необходимо массово поменять данные в поле таблицы.
К примеру, нужно изменить все цены поля Price таблицы Service. Задача состоит в том чтобы изменить цены на 20%, причем если получается дробное число, то в любом случае округлить его в меньшую сторону.


<?php
//параметры подключения к БД
$mysql_host = "localhost";
$mysql_user = "login";
$mysql_pass = "password";
$mysql_db = "database";

//функции подключения к базе данных и выбора БД. В функции mysql_connect() и mysql_select_db() передаются переменные параметров подключения
$sql_link = mysql_connect($mysql_host, $mysql_user, $mysql_pass) or die ("Невозможно соединиться с базой данных.");

mysql_select_db($mysql_db, $sql_link) or die("Невозможно выбрать базу данных.");

//Подключение к базе произошло. Теперь в функцию mysql_query() передаем коротенький MySQL запрос на выбор id-поля (поля уникальных ключей) и поля, в котором нам придется производить изменения.
$price_query = mysql_query("SELECT id, price FROM service") or die(mysql_error());

//Сейчас в переменной $price_query идентификатор запроса. Передаем значение $price_query в функцию mysql_fetch_assoc(), которая возвращает ассоциативный массив нужных ;) нам данных. Пройдемся по массиву циклом, получая и обрабатывая данные при каждой итерации.
while($row = mysql_fetch_assoc($price_query)){
$price_first = $row["cost"];
$id = $row["id"];
//При каждой итерации в переменные $id и $price_first записываются соответствующие текущие ключи и индексы ассоциативного массива $row. Теперь получаем цену, уменьшенную на 20%
$price = $price_first*0.8;

//Функция floor() округляет дробь в меньшую сторону.
$price = floor($price);

//Остается дело за малым - обновить данные таблицы, внося измененные цены. Новая цена для текущей итерации хранится в переменной $price. Ее мы передаем в запрос следующим образом:
mysql_query("UPDATE product SET cost='$price' WHERE id=$id") or die(mysql_error());

//Для самоконтроля можно вывести старые и новые цены.
echo $price_first." - ".$price."<br>";
}
?>

Важно!
Не забудьте, в запросе UPDATE при передаче строчных переменных необходимо обрамлять их в одинарные кавычки, при передаче числовых переменных можно обойтись без обрамления. Сам запрос ставится в двойные кавычки (а не наоборот — переменные php в двойные, а запрос в одинарные), в таком случае переменные php будут интерпретироваться корректно.

Важно!
Передаваемые в поля таблиц MySQL переменные php должны быть одинаковых с полями типов данных.

На самом деле, скрипт реализован в 14 строчек (учитывая «красивое» форматирование). Думаю, начинающему php-программисту не составит никакой сложности воспроизвести что-то аналогичное.

Комментировать

Комментарии

четрынадцать + 2 =