我有一个包含车辆列表的数据库,其中前三列用于使用 AJAX 填充链接选项值。这三个菜单可以在我的网站上选择特定车辆。有人问我是否可以在第 3 方网站上提供此车辆查找功能,目的是使用三层菜单在第 3 方网站上返回一个小的、可爆炸的字符串作为 $_POST 数据。
请问实现这一目标的最佳方法是什么?我可以启用远程连接,但在我知道如何充分保护它之前我很谨慎。
对不起,如果这看起来很愚蠢!我还没有使用 localhost 以外的任何连接。
提前致谢,
乔
我认为没有任何理由让第三方访问您的数据库。
既然您似乎希望向他们提供相当少量的可公开访问的数据,为什么不在您自己的网站上简单地拥有一个 url,它以 XML 或 JSON 格式返回数据,他们可以随心所欲地使用这些数据。
这解决了您的直接需求,如果您需要,您可以将其开发为更复杂的服务。
这是一些简单的 PHP,可用于以 JSON 格式返回数据。用适合您的数据库的东西替换 SQL。
$sth = mysql_query("select m.make, l.model, i.count from makes m, models l, inventory i where i.makeid = makeid and i.modelid = l.modelid");
$rows = array();
while($r = mysql_fetch_assoc($sth)) {
$rows[] = $r;
}
print json_encode($rows);
重要说明:此代码很简单,但如果您想接受第三方的输入,则不适合。如果你想让他们查询你有多少福特汽车,你需要一个准备好的语句,例如使用PDO:
$stmt = $pdo->prepare("select i.count from makes m, inventory i where i.makeid = makeid and make = :make");
$stmt->execute(array(':make' => $make));
我个人会在数据库前面放置一个 API 并公开该服务,因为我总是小心翼翼地将数据库公开给外部各方。
话虽如此,如果数据不是个人可识别或关键的。那么你当然可以让别人访问你的数据库。
最好的方法是为第三方创建一个新用户,并只给它使用他们需要的权限(即只有他们需要访问的数据库和表以及他们需要的操作(SELECT、UPDATE 等))
需要注意的另一件事是,这可能还需要对 MySQL 的 my.ini 配置文件进行一些更改,因为标准 MySQL 安装仅绑定在 localhost 上。
我看到它的方式是你有几个选择:
使用 OpenVPN 或 SSH 隧道之类的东西在两台服务器之间建立隧道,以允许 MySQL 远程连接通过(永远不要在公共接口上收听!)。虽然,我不会为第三方这样做。
为两台服务器之间的交互创建 Web 服务。如果您选择这样做,您应该使用已知的数据序列化方法,如 XML 或 JSON,而不是“可爆炸字符串”,因为这将允许更多的可移植性和更少的代码编写来解析您的结果。