第七星尘

用php代码远程连接数据库,可实现BAE与SAE数据库互访

2015年5月19日更新:项目地址已经迁移到github:https://github.com/star7th/RemoveMysql

———————原文分割线——————

As  we all know,无论是SAE或者BAE,都不支持链接外部数据库。仅支持跨应用访问。无论平台商是出于业务考虑还是安全考虑,数据库封闭多多少少让人觉得有点遗憾。尤其一些个人开发者,喜欢到各种服务器折腾,这个时候有个统一的数据库会非常方便。既可以充分利用各平台的优势进行开发,也可以方便地迁移。

Here comes my RemoveMysql. 通过接口实现跨数据库访问。RemoveMysql只适合小型开发,数据量大的时候,会严重受网络环境制约,可能会延迟很厉害。所以建议做小应用,不宜用于大应用环境。大应用建议自己写个完善的REST Server,或者换个支持传统方式访问数据库的远程服务器。By the way,使用RemoveMysql的时候注意网站安全,更改代码文件名和通信密匙以提高安全性。

下载地址:https://github.com/star7th/RemoveMysql/archive/master.zip

下载后,有两个文件夹。Dbclient是本地端,Dbserver是服务器。它们的关系是:Dbclient访问Dbserver上的数据库。例如,你可以把Dbclient放在SAE的一个应用上,把Dbserver放在BAE某个应用上。通过配置,可以让SAE应用访问BAE数据库。反过来也行。下面讲讲怎么配置。

1、配置Dbserver

Dbserver文件夹就只有index.php一个单文件。文件开头是个$config数组,保存着配置信息。你需要根据实际情况,填充必要信息。包括通信密匙(由你自定义的,Dbclient会用到),数据库服务器地址、端口等等。对于普通php空间,则在后台面板cpanel一般会写着。下面我就说说SAE和BAE的。

对于SAE,由于数据库信息被预定义成常量,所以可以很统一。你可以直接复制我下面的信息(除通信密匙外)

$config=array(
‘secret’=>’your_secret’, //填写通信密匙
‘host’=>SAE_MYSQL_HOST_M, //数据库服务器地址
‘port’=>SAE_MYSQL_PORT, //数据库服务器地址端口,
‘username’=>SAE_MYSQL_USER, //数据库用户名
‘password’=>SAE_MYSQL_PASS, //数据库密码
‘dbname’=>SAE_MYSQL_DB, //选择使用哪个数据库
‘charset’=>’utf8′ //编码,默认utf8
);

对于BAE,也差不多,下面的供参考


$config=array( ‘secret’=>’your_secret’, //填写通信密匙 ‘host’=>getenv(‘HTTP_BAE_ENV_ADDR_SQL_IP’), //数据库服务器地址 ‘port’=>getenv(‘HTTP_BAE_ENV_ADDR_SQL_PORT’), //数据库服务器地址端口 ‘username’=>getenv(‘HTTP_BAE_ENV_AK’), //数据库用户名 ‘password’=>getenv(‘HTTP_BAE_ENV_SK’), //数据库密码 ‘dbname’=>’awdUdInfgjfCKUdVDHmA’, //从平台获取查询要连接的数据库名称 ‘charset’=>’utf8′ //编码,默认utf8 );

特别指出,上面填写的’dbname’请从BAE后台查询。另外还要注意使用正确的数据库编码。不知道BAE默认编码现在还是不是GBK。总之是可以通过后台修改的。

2、使用Dbclient

index.php是个简单的调用示例。new Mysql()的时候需要两个参数:url和通信密匙。url即你的Dbserver端所在网址,通信密匙则是你在Dbserver端所定义的’secret’。至于详细的方法调用,请看MysqlClient.class.php的源码以及注释。如果封装的那些方法不够用,你可以根据你的实际情况,添加几个符合自己实际需要的操作方法

 如无特殊说明,本站皆为原创。转载请注明来自第七星尘的技术博客《用php代码远程连接数据库,可实现BAE与SAE数据库互访》

评论

  1. Hui #1

    请问这个能在wordpress用吗?求教程

    回复
    2015-08-9
  2. 最励志网 #2

    无意溜达到了你的网站 留下足迹

    回复
    2015-08-1
  3. yjulm #3

    博主你好,我没弄明白我直接同query_sql 都能成功插入数据到数据路,但get以及gets等其他函数反而取不出任何数据,直接返回null

    回复
    2015-01-6
  4. yjulm #4

    博主你好,我没弄明白我直接同query_sql 都能成功插入数据到数据路,但get以及gets等其他函数反而取不出任何数据,直接返回null

    回复
    2015-01-6
  5. Z君 #5

    博主能发一份RemoveMysql工具给我不?我在那个网站下不了。非常感谢。我的邮箱是934802811@qq.com

    回复
    2014-11-8
  6. 乐pi #6

    我 想知道
    SAE 怎么 直接 访问阿里云(Mysql)

    回复
    2014-11-6
  7. huamutongyou #7

    select count(id) from db_member where catid=18这句在phpmyadmin里面是没问题的,输出结果为5(条),你说的echo整条语句是啥意思?

    回复
    2014-02-10
  8. 第七星尘 #8

    建议你直接echo整条sql语句出来,然后复制到phpmyadmin运行一下看能发现什么问题不

    回复
    2014-02-10
  9. huamutongyou #9

    博主,我使用了你的removemysql,在输出计数的时候遇到了点问题。

    在脚本中我引用了mysqlclient.class.php,也定义了$mysql=new Mysql(‘http://url/’,’密钥’);

    输出一条结果条数的语句时,总是输出一个0。语句是:$number=$mysql->count("select count(id) from db_member where catid=’$input’");

    $input在上面也赋值了,测试输出有值“18”不是空,但放在这句sql里$number出来个0。如果把$input直接写成18,$number就有结果了共5条,这大概是什么问题??

    回复
    2014-02-10
  10. huamutongyou #10

    ‘dbname’=>SAE_MYSQL_DB, //选择使用哪个数据库

    要使用多个数据库怎么弄?

    回复
    2014-01-20
  11. Tater #11

    跨网访问效率你要考虑啊.

    回复
    2012-10-30
  12. 信仰飘扬 #12

    又有新东西了,来学习一下!

    回复
    2012-10-24
  13. 何留生 #13

    如果要实现BAE里wordpress和SAE里wordpress之间的数据库互访的,怎么才能实现呢?

    回复
    2012-10-23
    • 第七星尘

      没办法。如果硬要的话代码量很大。得不偿失。

      回复
      2012-10-24
    • 何留生

      问下,如果我SAE里的wordpress文章要导入到BAE里怎么导入啊,我通过插件说没有权限,导入数据库是总是提示错误,怎么办呢?

      回复
      2012-10-25