• 0
Илья Захаров

MySQL

Вопросы

Пишу приложение под iOS и Android... Создал базу данных на хостинге написал скрипты на PHP для получения данных. Пробовал GET запросом получить данные, возвращает пустые значения. Если через браузер смотреть то массивы данных возвращает правильно. Кто ни буть цепочки может написать как правильно это все реализовать.... Какие компоненты и какие статьи почитать... Заранее спасибо...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

15 ответов на этот вопрос

  • 0
29 минут назад, Илья Захаров сказал:

Пишу приложение под iOS и Android... Создал базу данных на хостинге написал скрипты на PHP для получения данных. Пробовал GET запросом получить данные, возвращает пустые значения. Если через браузер смотреть то массивы данных возвращает правильно. Кто ни буть цепочки может написать как правильно это все реализовать.... Какие компоненты и какие статьи почитать... Заранее спасибо...

Я это делаю на windows и mac, поэтому не знаю как себя поведет скрипт, но думаю ему без разницы. На стороне сервера я делаю php скрипт 

<?php

$pdo = new PDO('mysql:dbname=имя базы данных;host=localhost','имя юзера', 'пароль');

$pdo->exec("SET NAMES 'cp1251'"); // твоя кодировка, чтобы сервер тебя  правильно понял

$stmt = $pdo->prepare(" SELECT max(id) as id FROM grls_status WHERE type = 'main' ");

$stmt->execute(); // возвращает boolean - удалось ли выполнить запрос

 $allRows = $stmt->fetchAll(); // ассоциативный массив (см. документацию,  если нужны другие варианты)

 foreach ($allRows as $row) {print ",$row[id], ";}

php?>

В проекте делаю post запрос (хотя можно и get):

 sql_param:=TStringList.Create; // это параметры, которые можно передать. если ничего не надо передавать, то можно оставить пустую.

  form1.memo1.Lines.Add( form1.IdHTTP1.post( 'http://'+my_web+'/scri2/script.php', sql_param )); //my_web - это имя сервера

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
1 час назад, Vitaldj сказал:

Я это делаю на windows и mac, поэтому не знаю как себя поведет скрипт, но думаю ему без разницы. На стороне сервера я делаю php скрипт 


<?php

$pdo = new PDO('mysql:dbname=имя базы данных;host=localhost','имя юзера', 'пароль');

$pdo->exec("SET NAMES 'cp1251'"); // твоя кодировка, чтобы сервер тебя  правильно понял

$stmt = $pdo->prepare(" SELECT max(id) as id FROM grls_status WHERE type = 'main' ");

$stmt->execute(); // возвращает boolean - удалось ли выполнить запрос

 $allRows = $stmt->fetchAll(); // ассоциативный массив (см. документацию,  если нужны другие варианты)

 foreach ($allRows as $row) {print ",$row[id], ";}

php?>

В проекте делаю post запрос (хотя можно и get):

 sql_param:=TStringList.Create; // это параметры, которые можно передать. если ничего не надо передавать, то можно оставить пустую.

  form1.memo1.Lines.Add( form1.IdHTTP1.post( 'http://'+my_web+'/scri2/script.php', sql_param )); //my_web - это имя сервера

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

 

Спасибо...  А если допустим есть процедура  и ей передать нужно передать параметры как это выглядеть будет? И я вроде слышал что нужно токены для защиты генерить или это не обязательно? для пользователя разрешено только выполнение процедур.. И обязательно ли id сессии хранить и передовать

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
38 минут назад, Илья Захаров сказал:

Спасибо...  А если допустим есть процедура  и ей передать нужно передать параметры как это выглядеть будет? И я вроде слышал что нужно токены для защиты генерить или это не обязательно? для пользователя разрешено только выполнение процедур.. И обязательно ли id сессии хранить и передовать

Ну про защиту и токены - это вопрос не в этой ветке форума. Конечно лучше использовать, если у вас что то конфиденциальное. И если вы не хотите чтобы кто нибудь что нибудь сломал. И на совсем понял вопрос про id сессии.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
6 минут назад, Vitaldj сказал:

Ну про защиту и токены - это вопрос не в этой ветке форума. Конечно лучше использовать, если у вас что то конфиденциальное. И если вы не хотите чтобы кто нибудь что нибудь сломал. И на совсем понял вопрос про id сессии.

Еще раз спасибо разобрался..))) все пошло 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
1 минуту назад, Илья Захаров сказал:

Еще раз спасибо разобрался..))) все пошло 

Удачи!;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Объясните для чего так делать? Почему не использовать например FireDac?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
54 минуты назад, ENRGY сказал:

Объясните для чего так делать? Почему не использовать например FireDac?

Пример в студию!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
7 часов назад, ENRGY сказал:

как прямой коннект к базе через мобильный интернет работать будет ... Вроде читал что FireDac с Android не дружит...

Изменено пользователем Илья Захаров

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
9 часов назад, ENRGY сказал:

Ты предлагаешь прямой коннект с мобилы на mysql???? И для мобильных операционных систем ты не найдешь драйвера для коннекта к mysql.

Изменено пользователем Vitaldj

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

 

Цитата

Vitaldj

И для мобильных операционных систем ты не найдешь драйвера

Вообще информации много в сети по поводу доступа из моб. систем при помощи FireDac, это и статьи, видео и темы на форумах..

Откуда у вас такая информация? 

http://docwiki.embarcadero.com/RADStudio/Berlin/en/Mobile_Tutorial:_Using_FireDAC_and_SQLite_(iOS_and_Android)

 

Изменено пользователем ENRGY

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
16 минут назад, ENRGY сказал:

 

Вообще информации много в сети по поводу доступа из моб. систем при помощи FireDac, это и статьи, видео и темы на форумах..

Откуда у вас такая информация? 

http://docwiki.embarcadero.com/RADStudio/Berlin/en/Mobile_Tutorial:_Using_FireDAC_and_SQLite_(iOS_and_Android)

 

А вы случайно не путаете sqlite и mysql ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Vitaldj

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

Покурив мануалы, понял что FireDac MySQL не работает на моб. платфомах, есть только вариант использовать DevArt DAC, он работает с mySQL с моб. платформы, правда он платный (FireDac тоже в принципе платный ).

Изменено пользователем ENRGY

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
18 минут назад, ENRGY сказал:

Vitaldj

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

Покурив мануалы, понял что FireDac MySQL не работает на моб. платфомах, есть только вариант использовать DevArt DAC, он работает с mySQL с моб. платформы, правда он платный (FireDac тоже в принципе платный ).

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

Изменено пользователем Vitaldj

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Похожий контент

    • От Ilya.Z
      День добрый, может кто то сталкивался с такой проблемой - при использовании связки Unidac (пробовал и  FireDac) Delphi 10,1 + FirePower 10
      Подключаю Grid и в обычном wwDataGrid отрабатывается нормально,
      если взять wwLayoutGrid то ,при запуске программы, во всех ячейках отображается первая запись таблицы, при этом в дизайн моде все правильно показывает.
      в демосах при использовании MemDataset все норм, все красиво
      PS если dataset находится в той же форме что и layoutgrid все работает как надо, стоит перенести в отельный datamodule показывает лишь первую запись во всей таблице
      может кто подскажет идею, куда копать ? или сталкивался с похожей ситуацией ?
      Спасибо
       
      PS Вопрос закрыт, проблема в моем же дополнительном компоненте ..сорри мдам, буду разбираться от чего )
    • От striker
      Добрый день!
      Работаю с MySQL
      Подключаюсь через FireDac.
      FDQuery+FDConnecton+Bind+Grid
      Запрос выполняется моментально, но как только подключаю Grid - начинает висеть. Grid заполняется очень долго - секунд 12-15.
      Причем результат запроса - всего 230 строк, хоть и join присутствует.
      Куда копать? Может дело быть именно в FMX?
    • От Anasazi
      Всем доброго времени суток. Возникла необходимость решить такую задачу: в таблице базы MySQL хранится список изображений и их URL. Необходимо получить этот список массивом. Затем загрузить изображения и поочередно с интервалом показать их в TImage.
      Понимаю, что получить список изображений правильнее при помощи PHP скрипта, но в каком виде скрип должен вернуть данные, чтобы в Delphi получить из них массив не знаю.
      Раньше для получения изображений использовал такую процедуру. Но вопрос, где хранить изображения перед демонстрацией их в TImage? Создавать несколько MemoryStream?
      procedure LoadWebImage(url: string; image: TBitmap);
      var
        idhttp : TNetHTTPClient;
        ms : TMemoryStream;
      begin
       IdHTTP := TNetHTTPClient.Create(nil);
        ms := TMemoryStream.Create;
        try
          idhttp.Get(url, ms);
          ms.Position := 0;
          image.LoadFromStream(ms);
        finally
          ms.Free;
          idhttp.Free;
        end;
      end;
    • От ENERGY
      Как залить с Delphi Android в базу MySql строки, я примерно понял - составляем GET запрос и вставляем строки в параметры, затем считываем их в PHP скрипте и в базу.
      А вот как быть с картинкой. Как добавить картинку через PHP скрипт из программы на Android?
      POST запрос? Кто нибудь делал такое уже?
      Спасибо 
       
      P.s. На данный момент FireDAC не поддерживает работу с MySQL из под Android. Пока только SQLite и  InterBase ToGo. Даже если в будущем будет поддерживать, многие на этом форуме рекомендуют не использовать прямое подключение к базам из под мобильных систем, а использовать прямые GET запросы к примеру к PHP скриптам. Это связано с нестабильностью интернета т.к. так интернет может часто переключаться (от вышки к вышке) и менять параметры подключения. 
    • От Илья Захаров
      Помогите пожалуйста, поделитесь информацией или примерчиком. Есть база данных MySQL на хостинге Макхост. Мне нужно для соединения,работы с ней использовать SSH протокол я не понимаю как это сделать... может в компонентах FireDAC есть какая ни будь фича?  
    • От Djchel
      Доброго дня,форумчане.
      Уважаемые знатоки,ответьте пожалуйста,в чем у меня может быть проблема.Создаю приложение для Андрюши как дипломный проект. Использую связку MySQL+UniDac(direct connect). При подключении к интернету через WiFi прога работает на ура.Но при подключении через 3G не подключается никак.Connectoin timeout.Пробовал увеличить его- безрезультатно.может настройки какие поправить необходимо или ещё какие секреты есть.
      P.S. использовать прослойку не вижу смысла,да и знаний пока маловато в этой области.
    • От ivadimos
      Есть необходимость использовать js(php) код в делфи.
      Могу ли я каким-то образом просто подключать файлы, передавать в скрипт значение и получать ответ.
    • От Axbor
      Пытаюсь запустить демо проект из коробки XE10 которая находится по этому пути: C:\Users\Public\Documents\Embarcadero\Studio\17.0\Samples\Object Pascal\Database\FireDAC\Samples\Getting Started\MySQL
      При попытке соединится с сервером выдает ошибку 
      Client does not support authentication protocol requested by server; consider upgrading MySQL client
      Как это исправит?
    • От Pax Beach
      Столкнулся с проблемой взаимодействия своего приложения Android с сервером MySQL в локальной сети.
      Задача простая: скачать на планшет таблицу с данными с сервера MYSQL в локальной сети, выполнить на планшете действия с данными, выгрузить обратно на MySQL уже в другую таблицу результат действий.
      Начал разбираться, пересмотрел и перечитал множество примеров других разработчиков. Оказалось, что в RAD Studio 10 Seattle нет компонентов, способных заставить работать Android устройство напрямую с сервером MySQL.
      Конечно есть FireDAC, dbExpress.
      По факту, хоть разработчики dbExpress и заявляют, что компонент TSQLConnection работает с Android platform, но при попытке открыть соединение с MySQL сервером на Android устройстве сообщает об ошибке. На Windows компонент отрабатывает соединение нормально.
       

        Разработчики FireDAC честно заявили, что их соединение с MySQL на Android работать не будет.

       
       
      Какие есть выходы:
      1.    Создать DataSnap сервер, который будет установлен на сервере и взаимодействовать с Android клиентом и сервером MySQL. DataSnap будет являться прослойкой между Android и MySQL, через него можно осуществлять обмен данными, обернутыми в JSON.
      Для меня этот вариант не подходит, потому что по различным причинам устанавливать на сервер (или даже рабочую станцию) дополнительный сервер приложений не представляется возможным.
      2.    Использовать дополнительные компоненты, позволяющие работать с MySQL из-под Android и iOS.
       
      Поиск нужных компонентов для RAD Studio показал, что все они платные. И уж если бесплатных не найти, покупать нужно хороший продукт, которые поддерживает как минимум MySQL, SQLite, SQLServer.

       
       
      Не буду начинать холивар, скажу только, что для меня наиболее подходящим оказался компонент UniDAC от Харьковской компании Devart. Решающими факторами стали: удобнная политика лицензирования, приемлемая для задач цена, быстрая скорость ответа технической поддержки, конечно, поддержка всех распространенных серверов баз данных и нужных мне платформ, работа с большими объемами данных (более 100 тыс. записей), возможность 2 месяца тестировать компоненты, получить существенную скидку при покупке, рекомендации разработчиков с форума www.fire-monkey.ru .
       

       
       
      На сайте www.devart.com выбрал свою версию RAD Studio и скачал инсталяторы компонентов UniDAC и MyDAC. Установил и запустил RAD Studio. В главном меню RAD Studio появились соответствующие пункты меню, а в палитру компонентов добавились три закладки.
       

       
       
      Вы самостоятельно может скачать и попробовать компоненты можно по этой ссылке https://www.devart.com/unidac/
       
      Реализация кода:
                      Итак, я собрал тестовый стенд. На котором разместил 3 соединения, 3 набора данных, три кнопки для соединения и разъединения с сервером MySQL, и две метки, в которые при успешном соединении записываю случайную запись «Название компании» из таблицы «Покупатели», в одну Ansi формат, в другую UTF8. В качестве демонстрационной базы данных использую Northwind, поставляемую с RAD Studio.
                      Как видно на рисунке, тестировалась работа компонентов dbExpress, MyDAC, UniDAC.
       

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

       
       
                      Я прилагаю пример приложения, который вы самостоятельно сможете запустить на своей RAD Studio.
                      В результате, как и ожидалось, компоненты dbExpress не смогли соединиться с базой данных и вывалился с ошибкой “TDBXError: Unable to find procedure DBXLoader_GetDriver”. Которую было не просто отловить из-за отсутствия в компоненте обработчика Connection Timeout.

       
       
                      Компоненты MyDAC и UniDAC мгновенно соединялись с MySQL и считывали записи.
      Моя задача решена, переписываю решение в рабочий проект. Надеюсь и вам будет полезен этот пример.
       

      MyDACvsDbExpressDemo.zip
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу