gpt4 book ai didi

javascript - 电话间隙。无法访问远程mysql数据库

转载 作者:行者123 更新时间:2023-11-29 21:04:47 26 4
gpt4 key购买 nike

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

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

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

其中$servernamelocalhost

但是对于Phonegap localhost当然不起作用,所以我必须使用主机名IP地址

问题就在这里。我有一个带有 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);

当我在 VPS 上运行我的代码 (HTML+Jquery+Ajax+PHP) 并使用 localhost 时,它工作正常,但当我使用 IP 地址 时,它会失败或主机名

我也尝试过 mySQLjs :

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

但仍然没有成功。

我在mySQLjs找到的演示代码工作正常,所以我很确定我丢失了一些有关我的连接的信息。

如何使用IP 地址主机名 而不是使用localhost 访问MySql 数据库?我的 VPS 上应该设置什么配置吗?

最佳答案

已解决

经过多次尝试,我终于解决了。

出于安全原因,默认情况下禁用对 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 地址,这样它看起来像:

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。

希望我能帮助别人!

关于javascript - 电话间隙。无法访问远程mysql数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36909968/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com