【问题标题】:Using a PHP script to make a MySQL connection for a desktop application使用 PHP 脚本为桌面应用程序建立 MySQL 连接
【发布时间】:2011-06-22 09:27:15
【问题描述】:
好的,事情就是这样。
我的虚拟主机(恰好是我所在国家/地区最便宜和最可靠的)不允许直接访问我的 MySQL 数据库。我只能使用网站上的“localhost”连接到它。
这有点麻烦,因为我必须编写一个桌面应用程序来与数据库交互(可以使用 Web 界面,但如果可以的话,我想避免使用它)。我可能会用 C# 编写它。
所以也许我可以制作一个简单的 PHP MySQL 连接脚本,并使用该连接以某种方式使用 C# 查询数据库。
这可能吗?
【问题讨论】:
标签:
c#
php
mysql
database-connection
【解决方案1】:
这当然是可能的。通常直接数据库接口脚本用于该目的。但请注意限制对它的访问(.htpasswd、Allow From、https?)。
您可以使用直接接受 SQL 查询的简单 JSON 或 POST 接口,并将结果简单地返回为 JSON 数组:
<?php
// maybe even: $_POST = json_decode(file_get_contents("php://input"));
$db = new PDO(...);
$stmt = $db->prepare($_POST["query"]);
$stmt->execute($_POST["params"]); // enumerated array
print json_encode($stmt->fetchAll());
您可能需要添加一些错误检查并设计一种信号机制(通常只需发送一个带有魔术值或标识符的结果数组即可将其与普通数据列表区分开来)。
【解决方案2】:
我可以告诉你可以使用SQLyog php-mysql 隧道,但即使这是一个快速隧道脚本,你也必须考虑一些延迟过程,当你得到很大或巨大的结果时,这必须先由脚本处理它会向您的应用程序发送答案,因此,如果该软件不是时间紧迫的软件,则可以正常工作,否则,我鼓励您获得更好的托管解决方案,即使在您所在的国家/地区也是如此。
【解决方案3】:
我会编写一个 Web 服务来收集数据并以更可用的格式返回它,而不是让脚本执行原始查询。这为您提供了更好的安全性(通过不允许任意查询)和更轻松的维护(通过能够同时更改底层基础架构而不会弄乱服务器脚本和桌面客户端)。
【解决方案4】:
是的。有可能的。您可以使用 PHP 在那里连接和运行查询。请不要忘记为 php 代码添加一些安全代码。因为 http 访问你的 php 代码会带来危险。您可以加密 PHP 输出。
【解决方案5】:
如果您的客户要求是直接访问,我会更改主机并使用第三方 mysql 客户端,而不是重新发明轮子。