我有一个包含车辆列表的数据库,其中前三列用于使用AJAX填充链接选项值。这三个菜单可以在我的网站上选择特定的车辆。有人问我,是否可以在第三方网站上提供这种车辆查找,目的是使用三层菜单在第三方网站上返回一个小的、可爆炸的字符串作为$_POST数据。
请问实现这一目标的最佳方式是什么?我可以启用远程连接,但在我知道如何充分保护它之前,我会谨慎行事。
抱歉,如果这看起来很愚蠢!我还没有处理过除了localhost之外的任何连接。
提前感谢
Joe
我认为没有任何理由让第三方访问您的数据库。
既然看起来你想给他们提供相当少量的公共可访问数据,为什么不在你自己的网站上创建一个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,而不是"可解释字符串",因为这将允许更高的可移植性和更少的代码编写来解析结果。