Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Доступ к MySQL через PHPmyadmin Android, доступ Android устройств к БД MySQL 
V
    Опции темы
Rodeon
Дата 6.5.2020, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 28.8.2008
Где: Россия, Ухта

Репутация: нет
Всего: нет



Опишу ситуацию.

Решил попробовать реализовать удаленной доступ к БД MySQL.
Арендовал хостинг с MySQL и MyPHP.
Создал БД. таблицу, добавил временно весь спектр IP адресов, чтобы мог подключаться к БД напрямую с ПК.
настроил связь с ПК - все работает.

Встал вопрос о работоспособности Android устройств.
Почитал форумы - пишут что лучше реализовывать через PHP запросы - myphpadmin.
тем самым не будет root доступа к базе клиентов, работа на большинстве платформ, в том числе из web интерфейса и т.д.
в принципе один плюсы как я понял.

с PHP никогда ранее дел не имел.

Создал пустое Android приложение, кинул на форму IdHTTP.
Добавил обработку кнопки:
Код

procedure TTabbedForm.Button2Click(Sender: TObject);
var
  LoginInfo: TStringList;
  Response: TStringStream;
  Res: TStringList;
begin
  try
    Res:= TStringList.Create;
    LoginInfo := TStringList.Create;
    Response := TStringStream.Create('');
    LoginInfo.Add('dbname=u1039798_base1');
    LoginInfo.Add('charset=cp1251_general_ci');
    LoginInfo.Add('port=3306');
    LoginInfo.Add('user=u1039798_default');
    LoginInfo.Add('pass=fQY!cd8wg8Gi');
    LoginInfo.Add('sql = SELECT * FROM tbl');
    Res.Text:=IdHTTP1.Post('http://scp56.hosting.reg.ru',LoginInfo);
    Memo1.Lines.AddStrings(Res);
  finally
    begin
      Response.Free;
      LoginInfo.Free;
    end;
  end;
end;


На выходе в memo получаю следующее:
<html><head><META HTTP-EQUIV="Cache-control" CONTENT="no-cache"><META HTTP-EQUIV="refresh" CONTENT="0;URL=/cgi-sys/defaultwebpage.cgi"></head><body></body></html>

таблица следующей структуры:
Код

CREATE TABLE u1039798_base1.tbl(
  id INT(11) NOT NULL AUTO_INCREMENT,
  name TEXT DEFAULT NULL,
  bdate DATE DEFAULT NULL,
  PRIMARY KEY (id)
)
ENGINE = INNODB
AUTO_INCREMENT = 3
AVG_ROW_LENGTH = 8192
CHARACTER SET cp1251
COLLATE cp1251_general_ci
ROW_FORMAT = DYNAMIC;


имеет как минимум 1 запись.

Собственно, просьба подсказать что не так. Спасибо.
PM MAIL   Вверх
Rodeon
Дата 7.5.2020, 07:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 28.8.2008
Где: Россия, Ухта

Репутация: нет
Всего: нет



Вот же блин. Разобрался сам немного.
Многие примеры, на которые натыкался в интернете были на PHP 5.* версии. Сервер моего хостинга работает на версии PHP 7.0.
вместо обычного SQL -> SQL Improved (SQLi)
пришлось многие примеры адаптировать.
Очень помог сайт - Руководство по PHP
Оказывается надо на стороне сервера создать файл php.
Захожу по FTP на сервер в папку:
public_html/
создаю файл data.php следующего содержания:
Код

<?php

$SERVER = $_POST['DB_SERVER']; 
$USER = $_POST['DB_USER']; 
$PASSWORD = $_POST['DB_PASSWORD']; 
$DATABASE = $_POST['DB_DATABASE']; 

/* Открыть соединение */
$link = mysqli_connect($SERVER, $USER, $PASSWORD, $DATABASE);

/* Проверить соединение */
if (mysqli_connect_errno()) {
    printf("Ошибка соединения: %s\n", mysqli_connect_error());
    exit();
}

/* изменение набора символов на utf8 */
mysqli_set_charset($link, "utf8");

$query = "SELECT * FROM tbl";
if ($result = mysqli_query($link, $query)) {

    /* извлечение ассоциативного массива */
    while ($row = mysqli_fetch_assoc($result)) {
        printf ("%s (%s)\n", $row["id"], $row["name"], $row["bdate"]);
    }

    /* удаление выборки */
    mysqli_free_result($result);
}

/* закрытие соединения */
mysqli_close($link);
?>


Немного изменил обработку кнопки:
Код

procedure TTabbedForm.Button2Click(Sender: TObject);
var
  LoginInfo: TStringList;
  Response: TStringStream;
  Res: TStringList;
  otvet: TData;
begin
  try
    Res:= TStringList.Create;
    LoginInfo := TStringList.Create;
    Response := TStringStream.Create('');
{    LoginInfo.Add('dbname=u1039798_base1');
    LoginInfo.Add('charset=cp1251_general_ci');
    LoginInfo.Add('port=3306');
    LoginInfo.Add('user=u1039798_default');
    LoginInfo.Add('pass=fQY!cd8wg8Gi');
    LoginInfo.Add('sql = SELECT * FROM tbl');    }

    LoginInfo.Add('DB_SERVER=localhost');
    LoginInfo.Add('DB_USER=u1039798_default');
    LoginInfo.Add('DB_PASSWORD=fQY!cd8wg8Gi');
    LoginInfo.Add('DB_DATABASE=u1039798_base1');
    Memo1.Lines.Text:=IdHTTP1.post('http://u1039798.cp.regruhosting.ru/data.php',LoginInfo);
{    Memo1.Lines.Add(otvet.Name);}
  finally
    begin
      Response.Free;
      LoginInfo.Free;
    end;
  end;
end;


Ковыряюсь дальше.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.1065 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.