音差.无法访问远程 mysql 数据库

Phonegap. Cannot accessing remote mysql database

本文关键字:mysql 数据库 访问 音差      更新时间:2023-09-26

我正在用Phonegap做我的第一个实验。我想构建一个从 MySql 服务器检索数据的应用程序,但似乎问题是我无法连接到我的 dB。

当我建立网站时,这很容易。我使用 PHP 和以下代码:

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

$servername在哪里localhost

但是使用Phonegap localhost当然不起作用,所以我必须使用hostnameIP address

这就是问题所在。我有一个带有IP的VPS,主机名假设是 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);

当我在VPS上运行它并且使用localhost时,我的代码(HTML + Jquery+ Ajax + PHP)工作正常,但是当我使用IP addresshostname时它失败了。

我也尝试了mySQLjs:

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

但仍然没有成功。

我在mySQLjs上找到的演示代码工作正常,所以我很确定我缺少一些关于我的连接的东西。

如何使用IP addresshostname而不是使用localhost访问我的 MySql 数据库?是否有应该在我的VPS上设置的配置?

已解决

经过多次诱惑,我解决了这个问题。

默认情况下,出于安全原因,对 MySQL 数据库服务器的远程访问处于禁用状态。

1-您需要编辑MySQL配置文件并允许从与本地主机不同的来源进行访问。

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地址,因此它看起来像:

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>

压缩 HTML 文件、XML 文件和 JQuery.min.js并使用您的帐户将包上传到 build.phonegap.com。

希望我帮助了某人!