另外,我正在尝试在PHP在线编写一些代码,该代码将获取 "sql" 作为参数,并使用json_encode以JSON格式返回输出。
是否有更好的方法可以实现此功能?
当你尝试连接时,你会收到什么错误? 超时 = 防火墙阻止;权限被拒绝 = 权限不正确等。
一种解决方案是创建一个带有预编码查询的代理(我们称之为“存储过程”)-然后您可以说“运行查询5,参数A,B和C”。由于这将是服务器对服务器(而非公共)的传输,因此您只需要添加一些基本的身份验证系统(例如共享的轮换密钥,使用参数的校验和等),但也要确保查询不会因为任何参数的注入而变得危险。
免责声明:这是一种解决方案,但我实际上并不推荐除非你非常确定它是安全的!
您是否有Cpanel?如果是的话,请尝试将您的主机添加到远程MySQL中。如果您不确定如何操作,请参考此链接http://www.liquidweb.com/kb/enable-remote-mysql-connections-in-cpanel/。
我不确定您是否具有根访问权限或访问my.cfg的权限。如果您可以编辑它,请确保注释或删除“skip-networking”行,并包含“bind-address = *”行。在编辑配置后重新启动mysql。
出于安全考虑,您不应该通过(公共)网络直接访问数据库。
一种方法是在数据库服务器上编写一个 PHP 脚本,然后通过 HTTP/POST 访问它。
您应该通过用户名和哈希密码对客户端进行身份验证。您发送的数据应该是加密的(例如使用用户明文密码)。不要发送完整的查询语句,只需发送想要执行的操作和参数即可。例如,您想要为客户获取订单,可以发送具有以下参数的 POST 请求:user=abc,password=9151440965cf9c5e07f81eee6241c042a7b78e9bb2dd4f928a8f6da5e369cdffdd2b70c70663ee30d02115731d35f1ece5aad9b362aaa9850efa99e3d197212a,data=EncryptedData
您可以注意到,密码是 SHA512 哈希。
数据可以是 JSON 或其他任何格式: { "Command": "GetOrder", "Limit": "10" }
在您的 PHP 代码中,您需要执行以下步骤: 1. 验证用户,如果密码不正确,则响应错误代码等 2. 解密数据 3. 执行查询 4. 返回加密数据结果
如果您不想在数据库中存储明文密码,可以将哈希值存储在数据库中,并使用双重哈希值进行身份验证和单个哈希值进行加密。
如果您想要执行来自请求的带参数查询,应该使用准备好的语句来防止 SQL 注入。
有关在 PHP 中进行加密/解密的更多信息,请参见:http://php.net/manual/de/ref.mcrypt.php
像一些答案建议的那样,我认为你被bigrock防火墙屏蔽了。
现在如果你想使用AJAX/PHP,你需要三样东西: - 你的C#类来发送请求并接收结果 - 你的HTML/JS(或jQuery)文件来接收请求并将其传递给你的PHP。然后发送结果给你。 - 你的PHP文件来查询你的数据库。
对我来说,AJAX似乎是多余的,你可以通过POST或GET参数直接发送查询(例如:example.com/query.php?req='SELECT * FROM clients'
)
代码如下:
//create the constructor with post type and few data
MyWebRequest myRequest = new MyWebRequest("http://www.example.com/query.php","POST","req=");
//use System.Web.Script.Serialization and myRequest.GetResponse();
一些关于System.Web.Script.Serialization的教程。
在PHP方面:
<?php
$request=$_POST['req'];
$dsn = 'mysql:dbname=mydb;host=example.com';
$user = 'ajay';
$password = '0000';
try {
$dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
$response = $dbh->query($request);
while ($rep = $response->fetch())
{
$response_array[] = $rep;
}
$response->closeCursor();
$return = json_encode($rep);
return($return);
?>
那只是个快速草稿,但据我所知应该能够运行。
>nslookup
> set q=ptr
> 8.8.8.8
Non-authoritative answer:
8.8.8.8.in-addr.arpa name = google-public-dns-a.google.com
8.in-addr.arpa nameserver = ns1.Level3.net
8.in-addr.arpa nameserver = ns2.Level3.net
主机将被设置为google-public-dns-a.google.com
。
第二个方法有效,但我不确定为什么在我之前的一个项目中,你可能认为IP地址足够了。