Создание и работа с удаленной базой данных MySQL через PHP
В данной статье я постараюсь подробно описать как создать базу данных MySQL на сервере, как создать PHP скрипт для работы с этой базой данных, как создать приложение для мобилы, которое будет обращаться к нашему PHP скрипту.
К примеру, перед нами стоит банальная задача: У нас есть некая мобильная игра и нам хотелось бы чтобы таблица результатов к этой игре хранилась на удаленном сервере. Если у вас немного другие задачи, неважно. Принцип один и тот же. Нужно с мобильника передать информацию PHP скрипту чтобы он записал её в базу данных и наоборот, обратиться к PHP скрипту чтобы он нам выдал какую-то информацию из базы данных. Это не обязательно может быть таблица результатов. Вы, к примеру, можете сделать онлайн регистрацию для вашей программы и на сервере, к примеру, будет хранится информация типа имя/пароль и PHP скрипт будет только хранить эту информацию и выдавать ответ можно ли запускать программу или нет. Всё это лишь мелкие детали, принцип кругом один и тот же. Так что тут мы покажем всё это на примере хранения таблицы рекордов.
Прежде всего нам нужно выбрать хостинг. Подойдет далеко не любой.
Нам нужен хостинг с поддержкой PHP, MySQL, FTP. А таких мало, поверьте мне.
Я нашел бесплатный хостинг для примера. Но вам всё же советую воспользоваться платным хостингом.
Поверьте, лучше заплатить 10$ и получить качественный хостинг без рекламы и тормозов, чем мучиться с бесплатным.
Я нашел для примера бесплатный хостинг на
http://hostmonster.org.ua/
Итак, я создал бесплатный сайт
www.mptest.hmsite.net
При регистрации мне дали такую информацию:
Адрес MySQL сервера: sql301.hmsite.net
Пользователь MySQL: hoste_5225350
Пароль для MySQL: 123456mp
Адрес FTP сервера: ftp.hmsite.net
Логин FTP: hoste_5225350
Пароль FTP: 123456mp
При регистрации вас попросят подтвердить ваш email. Думаю с этим проблем не возникнет, просто перейдите по ссылке в пришедшем письме.
C помощью контрольной панели (
http://cpanel.hmsite.net/) я создал базу данных под названием "mybase" (её тут же перекрестили в "hoste_5225350_mybase")
Если на вашем хостинге нет контрольной панели и нет никаких инструментов по работе с базами данных, не беда. Можно всё сделать и с помощью одного только PHP.
Теперь приступаем к созданию PHP скрипта.
Для начала основы синтаксиса MySQL запросов.
Для создания нашей базы данных нужно дать серверу команду:
CREATE TABLE `scores` (`id` INTEGER UNSIGNED NOT NULL DEFAULT NULL AUTO_INCREMENT, `username` TEXT NOT NULL, `points` INT NOT NULL, PRIMARY KEY(`id`));");
В этом случае в нашей базе данных создастся таблица под названием "scores" с тремя колонками:
id - тут хранится уникальный ID номер записи в таблице, MySQL сервер сам присваивает номера нашим записям (INT)
username - тут хранится имя пользователя (TEXT)
points - тут будут храниться набранные очки (INT)
Для добавления записи в нашу таблицу нужно дать серверу команду типа:
INSERT INTO `scores` VALUES (0, 'vasya', 12345);
В этом случае в таблицу "scores" добавится запись с именем пользователя "vasya" и очки его "12345".
ID номер в таблице будет вставлен автоматически сервером.
Для получения таблицы рекордов нужно передать команду:
SELECT `username`, `points` FROM `scores`;
то есть мы тут перечисляем какие колонки (username, points) нужно отображать и указываем имя таблицы (scores).
Но в таблице могут содержаться сотни тысяч записей, а нам нужно вывести список из 10 пользователей с наибольшим количеством очков,
поэтому наш запрос нужно немного усовершенствовать:
SELECT `username`, `points` FROM `scores` ORDER BY 2 DESC LIMIT 10;
тут мы дополнительно указываем, что нужно сделать сортировку по второму столбику (ORDER BY 2) в порядке убывания значений (DESC)
причем выводить нужно только первые 10 значений (LIMIT 10).
В принципе, этих знаний уже хватит для создания скрипта. Если перед вами стоят другие задачи или вы заинтересовались остальными поддерживаемыми
командами MySQL сервера - советую почитать книгу по MySQL потому как все команды сервера описать в данной статье не представляется возможным.
Итак, создаем файл score.php и в любом текстовом редакторе пишем там такие строки:
<?
$host = "sql301.hmsite.net"; // Адрес нашего MySQL сервера
$user = "hoste_5225350"; // Имя пользователя
$pass = "123456mp"; // Пароль
$base = "hoste_5225350_mybase"; // Название базы данных
$action = "none"; // Значение действия по умолчанию
if (isset($_GET['action'])) $action = $_GET['action']; // Если в GET запросе передается параметр action, то записать его в переменную $action
if ($action == "install") // Если передали команду "install" (установка таблицы)
{
$conn = mysql_connect($host, $user, $pass) or die("Could not connect"); // Попытка соединиться с MySQL сервером
//mysql_create_db($base); // Создаем базу данных если она не создана, то уберите кавычки в начале строки
mysql_select_db($base) or die("Can't select database."); // Выбираем нашу базу данных
$result = mysql_db_query($base, "CREATE TABLE ".$base.".`scores` (`id` INTEGER UNSIGNED NOT NULL DEFAULT NULL AUTO_INCREMENT, `username` TEXT NOT NULL, `points` INT NOT NULL, PRIMARY KEY(`id`));"); // Передаем команду на создание таблицы
echo "Database created!"; // Выводим сообщение, что создание прошло успешно
}
if ($action == "get")
{
$conn = mysql_connect($host, $user, $pass) or die("Could not connect"); // Попытка соединиться с MySQL сервером
mysql_select_db($base) or die("Can't select database."); // Выбираем нашу базу данных
$result = mysql_db_query($base, "SELECT `username`, `points` FROM `scores` ORDER BY 2 DESC LIMIT 10;"); // Делаем запрос на выдачу таблицы результатов
while($row = mysql_fetch_array($result)) // Цикл пока есть значения в нашем сполученном списке строк
{
$name = $row['username']; // Отделяем имя пользователя
$points = $row['points']; // Отделяем количество очков
echo $name."|".$points."|"; // Выводим на экран имя и очки разделяя их символом |
}
}
if ($action == "save") // Если передали команду "save" (запись рекорда в таблицу)
{
$name = $_GET['name']; // извлекаем имя пользователя
$points = $_GET['points']; // извлекаем количество очков
$conn = mysql_connect($host, $user, $pass) or die("Could not connect"); // Попытка соединиться с MySQL сервером
mysql_select_db($base) or die("Can't select database."); // Выбираем нашу базу данных
$result = mysql_db_query($base, "INSERT INTO `scores` VALUES (0, '".$name."', ".$points.");"); // Добавляем запись в таблицу
if ($result != false) echo "Saved!"; // Выводим сообщение, что добавление записи прошло успешно
else echo "Save error"; // Ошибка записи
}
?>
Я постарался прокомментировать каждую строку в скрипте, так что вам должно быть всё понятно.
Для переделки скрипта под ваш хостинг нужно будет только изменить первые 4 строчки скрипта, где указываются адрес сервера, логин, пароль, название базы данных и проч.
Теперь нам понадобится FTP доступ к нашему сайту.
Для соединения с сайтом я использую Total Commander. Вы же можете легко применить и другой FTP клиент.
Итак, в TC нажимаем Ctrl+F или выбираем пункт FTP - Соединиться с FTP сервером
В появившемся окне нажимаем кнопку "Добавить..." и вводим в поля нужные значения.
и жмем кнопку "Ок". В появившемся окне выбираем имя нашей учетной записи и жмем "Соединиться".
Если все параметры вы ввели правильно и соединение прошло успешно, то в одной из панелей вы увидите папку под названием "htdocs".
Именно в эту папку нам и нужно закачать наш скрипт score.php
С удаленными папками на FTP сервере можно работать как и с обычными.
Для закачки файла просто перетащите его из одного окошка в другое.
Теперь запускаете ваш любимый браузер. У кого Opera, у кого FireFox. На худой конец сгодится и IE.
СОЗДАНИЕ ТАБЛИЦЫ В БАЗЕ ДАННЫХ
Для создания базы данных нужно в браузере набрать ссылку типа
http://mptest.hmsite.net/score.php?action=install
если установка пройдет удачно, то вы увидите в браузере строку "Database created!" иначе - сообщение с причинами неудачи.
ДОБАВЛЕНИЕ ЗАПИСИ В ТАБЛИЦУ
Теперь попробуйте добавить запись в таблицу. Для этого в браузере пишем запрос типа:
http://mptest.hmsite.net/score.php?action=save&name=vasya&points=0
если запись прошла удачно, то вы увидите в окошке браузера строку "Saved!".
ЗАПРОС ЗАПИСЕЙ ИЗ ТАБЛИЦЫ
Ну а теперь попробуем запросить таблицу результатов. Для этого в браузере пишем в строке адреса такое:
http://mptest.hmsite.net/score.php?action=get
если запрос отработается удачно, то в окне браузера мы увидим строку "vasya|0|". Что и требовалось.
Теперь пишем программу для MIDlet Pascal:
Program MySQLtest;
Uses parse;
Var conn: http;
s: string;
i, hgt: integer;
Begin
// Пример отправки рекорда на сервер
{
if not OpenHttp(conn, 'http://mptest.hmsite.net/score.php?action=save&name=midlet&points=10') then Halt;
SetHttpMethod(conn, GET);
if SendHttpMessage(conn) <> 200 then Halt;
}
// Пример запроса таблицы рекордов с сервера
if not OpenHttp(conn, 'http://mptest.hmsite.net/score.php?action=get') then Halt;
SetHttpMethod(conn, GET);
if SendHttpMessage(conn) <> 200 then Halt;
s:=GetHttpResponse(conn);
// Выводим таблицу результатов на экран
hgt := GetStringHeight('X') / 2; // Высота шрифта
parse.line(s, '|'); // Парсим результат
for i:=0 to 3 do
begin
DrawText(parse.get(i) + ' - ' + parse.get(i+1), 5, 5 + i * hgt);
i:=i+1;
end;
Repaint;
Delay(5000);
End.
В KEmulator работает нормально. Хотя возможно придется и использовать библиотеку типа Lib_web.