PhoneGap. Не удается получить доступ к удаленной базе данных mysql

Я делаю первые эксперименты с Phonegap. Я хотел бы создать приложение, которое извлекает данные с сервера MySql, но кажется, что проблема в том, что я не могу подключиться к моему дБ.

Когда я создаю веб-сайты, это легко. Я использую PHP и следующий код:

$conn = new mysqli($servername, $username, $password); 

где $servernamelocalhost

Но с PhoneGap localhost не будет работать, конечно, поэтому мне нужно использовать hostname или IP address .

И вот проблема. У меня есть VPS с IP, а имя хоста, предположим, vps.my-domain.com . Оба не дадут мне доступ к MySql db, и я не понимаю, почему.

Следующие строки сообщают:

'SQLSTATE [HY000] [2005] Неизвестный сервер MySQL-сервера' vps.my-domain.com:3306 '(20)'

 $conn = new mysqli("xxx.yy.kkk.qqq", $username, $password); $conn = new mysqli("vps.my-domain.com", $username, $password); 

Мой код (HTML + Jquery + Ajax + PHP) отлично работает, когда я запускаю его на своем VPS, и я использую localhost но он терпит неудачу, когда я использую IP address или hostname .

Я также пытался с mySQLjs :

 MySql.Execute( "http://xxx.yy.kkk.qqq", "username", "password", "phonegap", "select * from test", function (data) { console.log(data) }); 

но все равно безуспешно.

Демонстрационный код, который я нашел в mySQLjs, отлично работает, поэтому я уверен, что у меня что-то отсутствует в моем соединении.

Как получить доступ к моей базе данных MySql, используя IP address или hostname а не использовать localhost ? Есть ли конфигурация, которая должна быть установлена ​​на моем VPS?

РЕШИТЬ

После многих искушений я справился.

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

1- Вам нужно отредактировать конфигурационный файл MySQL и разрешить доступ от источника, отличного от localhost.

 nano /etc/mysql/my.cnf 

2- измените адрес bind-address строк на:

 bind-address = your_ip_number ie bind-address = xxx.yy.qqq.tt 

3- перезапуск MySQL:

 /etc/init.d/mysql restart 

4- с PHPMyAdmin создать пользователя, который является вашим IP-адресом, чтобы он выглядел так:

 phonegap@your_ip_number 

Ниже приведен код (HTML + PHP + CONFIG.XML)

HTML

 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Fetch MySQL data into Phonegap app</title> <script src="jquery.min.js"></script> <script src="phonegap.js"></script> <!-- When you build the app with build.phonegap.com remove the phonegap.js file from the package you are going to upload but keep its reference --> </head> <body> HELLO WORLD! <div id="output"></div> <script> $(document).ready(function($){ var output = $('#output'); $.ajax({ url: 'http://your_domain.com/get.php', // FULL PATH! dataType: 'jsonp', jsonp: 'jsoncallback', timeout: 3000, success: function(data, status){ $.each(data, function(i,item){ var landmark = '<h1>'+item.title+'</h1>' + '<p>'+item.description+'<br>' + item.url+'</p>'; output.append(landmark); }); }, error: function(){ output.text('There was an error loading the data.'); } }); }); </script> </body> 

PHP

 <?php header("Access-Control-Allow-Origin: *"); $db_username = 'the_user_you_created'; $db_password = 'the_password'; $db_name = 'the_db_name'; $db_host = 'your_ip_number'; $mysqli = new mysqli($db_host, $db_username, $db_password, $db_name); if ($mysqli->connect_error) { die('Error : ('. $mysqli->connect_errno .') '. $mysqli->connect_error); } // Run the query and fetch the data. $html contains the result // Convert it to JSON and remember to add the 'jsoncallback' string echo $_GET['jsoncallback'] . '(' . json_encode($html) . ');'; ?> 

CONFIG.XML Это конфигурационный файл для Phonegap

 <?xml version="1.0" encoding="UTF-8" ?> <widget xmlns = "http://www.w3.org/ns/widgets" xmlns:gap = "http://phonegap.com/ns/1.0" id = "com.phonegap.example" versionCode = "10" version = "1.0.0" > <!-- versionCode is optional and Android only --> <name>Your app</name> <description> My first MySql connection with Phonegap </description> <author href="http://www.my_domain.com"> Its me </author> <!-- The two following lines make the difference! Important --> <gap:plugin name="cordova-plugin-whitelist" source="npm"/> <!-- In my esperience only * worked. Using the IP address (http://xxx.yy.qqq.tt or simply xxx.yy.qqq.tt) did not work --> <access origin="*" subdomains="true" /> </widget> 

ZIP-файл HTML, XML-файл и JQuery.min.js и загрузите пакет на build.phonegap.com, используя свою учетную запись.

Надеюсь, я помог кому-то!