2016-04-28 4 views
0

私はPhonegapで初めての実験をしています。私は、MySqlサーバーからデータを取得するアプリケーションを構築したいと思いますが、私のdBに接続できないという問題があるようです。Phonegap。リモートのmysqlデータベースにアクセスできない

私は簡単にウェブサイトを構築します。 $servernamelocalhost

あるしかし、私はhostnameまたはIP addressを使用する必要がありますので、PhoneGapのlocalhostで、もちろん動作しません

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

:私は、PHP、次のコードを使用します。

ここに問題があります。私はIPを持つVPSを持っており、ホスト名はvps.my-domain.comとする。どちらもMySqlデータベースへのアクセスを私に与えません、なぜ私は理解しません。

次の文字列は、報告:

'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に見つけたデモコードはうまく動作するので、私の接続について何か不足していると確信しています。

localhostではなく、IP addressまたはhostnameを使用してMySqlデータベースにアクセスするにはどうすればよいですか? VPSに設定する必要がある設定はありますか?

+1

ランダムに接続されたデバイスからインターネットに直接接続するアプリケーションを設計しないでください。これは非常に危険です。 MySQLは攻撃に対して強化されておらず、誰かによって容易に妨害される可能性があります。アクセス制御もほぼ完全に不可能です。誰かが書き込みアクセスを必要とする場合は、別のレコードグループにロックすることはできません。最低でも、アプリケーションがやりとりするいくつかの細いAPIを使用する必要があります。 JSONは非常に一般的な選択です。軽量で、HTTPSは接続するための最もユビキタスな方法です。 – tadman

答えて

0

は、私はそれを働いた多くのtemptatives後

を解決しました。

デフォルトでは、セキュリティ上の理由から、MySQLデータベースサーバーへのリモートアクセスは無効になっています。

1- MySQL設定ファイルを編集し、localhost以外の起点からのアクセスを許可する必要があります。

nano /etc/mysql/my.cnf 

2 - 変更行bind-addressへ:

bind-address = your_ip_number   i.e. bind-address = xxx.yy.qqq.tt 

、3-再起動のMySQL:

/etc/init.d/mysql restart 

、4- PHPMyAdminのと、それようにホストがIPアドレスでユーザーを作成します次のようになります。

[email protected]_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にこれがあります設定です

<?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> 

は、HTMLファイル、XMLファイルとJQuery.min.jsをZIP PhoneGapの

用ファイルと自分のアカウントを使用してbuild.phonegap.comにパッケージをアップロードします。

私は誰かを助けました!

関連する問題