mysql云数据库外部调用方案 如百度云,新浪SAE数据库

一直用着SAE的数据库非常的不错.就是不能外部使用.只能在sae内部使用,不太好.所以花了点时间写了点东西以便外部调用.代码比较简单.分为两部分.一部分为服务端.一部分为客户端.

理论上适用于所有云数据库.不过得根据具体情况进行调试

<?php
//sae客户端代码
$config= array(
    ‘hostname‘          =>  ‘http://2.freedaili.sinaapp.com/server_apimysql.php‘, // 服务器地址
    ‘database‘          =>  ‘app_freedaili‘,          // 数据库名
    ‘password‘          =>  ‘756663992‘,          // 数据密钥(服务端自己设定)
);
require_once ‘apimysql.class.php‘;
$db = new apimysql($config);

//$data=$db->version();print_r($data);
$data=$db->getone(‘select * from test_api order by id desc‘);print_r($data);
//$data=$db->getall(‘select * from test_api order by id desc‘);print_r($data);
//$data=$db->insert("insert into test_api(name) values(‘test‘)");print_r($data);
//$data=$db->update("update test_api set name=‘test1‘ where id=1");print_r($data);
//$data=$db->delete("delete from test_api where where id=1");print_r($data);
//$data=$db->query(‘CREATE TABLE IF NOT EXISTS `test_api` (`id` int(10) NOT NULL AUTO_INCREMENT,`name` varchar(255) NOT NULL,PRIMARY KEY (`id`)) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;‘);print_r($data);
?>
apimysql.class.php
<?php
// +----------------------------------------------------------------------
// | Copyright (c) 2115 All rights reserved.
// +----------------------------------------------------------------------
// | Author: xiaogg <[email protected]>
// +----------------------------------------------------------------------
class apimysql
{
    // 数据库连接参数配置
    protected $resultdata;
    protected $error;
    protected $config     = array(
        ‘hostname‘          =>  ‘127.0.0.1‘, // 服务器地址
        ‘database‘          =>  ‘‘,          // 数据库名
        ‘password‘          =>  ‘‘,          // 数据密钥
    );
    public function __construct($config=‘‘){if(!empty($config)) {$this->config   =   array_merge($this->config,$config);}}
    public function query($sql , $type = ‘‘,$querytype=‘‘){
        $data=array();$data[‘sql‘]=$sql;$data[‘type‘]=$type;$data[‘querytype‘]=$querytype;
        $result=$this->get_result($data);return !empty($result[‘data‘])?$result[‘data‘]:$result[‘msg‘];
    }
    public function version(){return $this->query(‘version‘,‘version‘);}
    public function getone($sql){return $this->query($sql,‘getone‘);}
    public function getall($sql){return $this->query($sql,‘getall‘);}
    public function insert($sql){return $this->query($sql,‘query‘,‘insert‘);}
    public function update($sql){return $this->query($sql,‘query‘,‘update‘);}
    public function delete($sql){return $this->query($sql,‘query‘,‘delete‘);}
    public function num_rows($sql){return $this->query($sql,‘num_rows‘);}    
    public function affected_rows(){return mysql_affected_rows($this->connid);}
    public function insert_id() {return $this->resultdata;}
    function fetch_row($query){return is_array($this->resultdata)?count($this->resultdata):$this->resultdata;}
    function error(){return $this->error;}
    private function get_result($data){
        if(empty($data[‘type‘]))$data[‘type‘]=‘query‘;
        if(empty($data[‘db_name‘]))$data[‘db_name‘]=$this->config[‘database‘];        
        $postdata=$this->formatdata($data);
        $result=$this->curlpost($this->config[‘hostname‘],$postdata);
        $result=json_decode($result,true);$this->resultdata=!empty($result[‘data‘])?$result[‘data‘]:‘‘;$this->error=!empty($result[‘msg‘])?$result[‘msg‘]:‘‘;return $result;
    }
    private function curlpost($url, $params=‘‘) {
        $opts = array(CURLOPT_TIMEOUT => 5,CURLOPT_RETURNTRANSFER=> 1,CURLOPT_SSL_VERIFYPEER=> false,CURLOPT_SSL_VERIFYHOST=> false,CURLOPT_HTTPHEADER => array());        
        $params = http_build_query($params);$opts[CURLOPT_URL] = $url;$opts[CURLOPT_POST] = 1;$opts[CURLOPT_POSTFIELDS] = $params;
        $ch = curl_init();curl_setopt_array($ch, $opts);$data = curl_exec($ch);$error = curl_error($ch);curl_close($ch);/* 初始化并执行curl请求 */
        return $data;
    }
    private function createarraystring($para,$encode=‘1‘) {
        ksort($para);reset($para);$arg  = "";
        while (list ($key, $val) = each ($para)) {$arg.=$key."=".(isset($encode)?urlencode($val):$val)."&";}    
        $arg = substr($arg,0,-1);if(get_magic_quotes_gpc()){$arg = stripslashes($arg);}return $arg;//如果存在转义字符,那么去掉转义
    }
    private function formatdata($data){$authstr=$this->createarraystring($data);$data[‘sign‘]=md5($authstr.$this->config[‘password‘]);return $data;}
}
?>
时间: 2024-10-14 08:46:50

mysql云数据库外部调用方案 如百度云,新浪SAE数据库的相关文章

新浪SAE数据库信息

此账号仅能在SAE平台上使用,不能从外部连接我们建议开发者使用SaeMysql操作数据库 如果您想自己实现数据库相关操作,可以使用以下常量: 用户名  : SAE_MYSQL_USER 密 码 : SAE_MYSQL_PASS 主库域名 : SAE_MYSQL_HOST_M 从库域名 : SAE_MYSQL_HOST_S 端 口 : SAE_MYSQL_PORT 数据库名 : SAE_MYSQL_DB 如果自己连接数据库的话,数据库名应该是 app_应用名 用户名为accesskey 密码为se

国内云引擎平台概览——新浪SAE,阿里ACE,百度BCE

新浪SAE 平时大家的測试server都是执行在自己的PC上面,用Tomcat或者IIS搭建的本机server. 事实上新浪云平台SinaAppEngine也是挺好用的. 今天总结一下我使用过程中的一些小心得: 1.创建SAE应用: 登陆http://sae.sina.com.cn/进行注冊,微博帐号能够直接登陆.注冊成功后进入"我的首页".控制台>应用管理>创建新应用 然后输入二级域名(应用的唯一标示),应用名称和其它信息,最后选择开发语言,这里以Java为例: JVM级

新浪SAE云平台下使用codeigniter的数据库配置

新浪SAE云平台下使用codeigniter的数据库配置 投稿:shichen2014 字体:[增加 减小] 类型:转载 这篇文章主要介绍了新浪SAE云平台下使用codeigniter的数据库配置,主要涉及在database.php的配置,需要的朋友可以参考下 由于新浪SAE对文件权限的限制,cache目录无法修改权限,因此原版Codeigniter无法直接使用.可以尝试codeIgniter 2.10 for SAE:http://code.google.com/p/ci-sae/. 在dat

如何连接新浪sae共享数据库

网上找了很久,太杂了,下文介绍如何连接新浪sae共享数据库,方便有效 1.首先贴出官方文档: 以下是一些和共享MySQL数据库服务相关的预定义常量,你可以直接引用这些参数来连接数据库: 用户名 : SAE_MYSQL_USER 密 码 : SAE_MYSQL_PASS 主库域名 : SAE_MYSQL_HOST_M 从库域名 : SAE_MYSQL_HOST_S 端 口 : SAE_MYSQL_PORT 数据库名 : SAE_MYSQL_DB 使用方法,以MySQL模块为例: <?php //

Swift轻松入门——基本语法介绍和详细地Demo讲解(利用WebView打开百度、新浪等网页)

本文主要分为两个部分,第一部分介绍Swift的基本语法,第二部分讲解一个利用WebView来打开百度.sina等网页的小demo,如果对swift的语法不感兴趣的同学可以直接跳到第二部分来感受下Swift的魅力-(本文的demo源码已上传至github:https://github.com/iOSGeek0829/XSurfing) 一.Swift常用语法 Swift是Apple去年推出的一门新的语言,基于C和Objective-C,而没有C的一些兼容约束,它采用了安全的编程模式和添加现代的功能

云应用开发之新浪SAE读写云端数据库MySQL

本博文为前篇博文新浪云应用SAE日志查看的延续. 在读写云数据库MySQL之前,须要说明的是,在新浪云平台上使用数据库时.该平台默认会为每个应用单独新建一个数据库database实例.在该实例中再创建各种我们须要的表tables.当然,通过设置能够让多个应用共享同一个数据库实例. 以下为应用加入数据库服务步骤. 一.通过控制台初始化MySQL 1.在新浪云控制台左側数据库服务子项下进入共享型MySQL 2.然后出现页面 3.点击初始化MySQLbutton出现页面 4.点击第一个方框(通过第二个

混合云存储跨云灾备方案之跨云复制

摘要: 混合云容灾实现了跨云/多云场景中的应用和整机的灾备和恢复.支持整机和主流的企业应用,如各版本的Oracle(Oracle RAC近期即将支持)和SQL Server等.先进的压缩重删服务节约了备份时的网络带宽和空间占用,云灾备库的按需分配和弹性无限扩展,灾备ECS可关机不付费等多个特性,从多个维度将用户成本降到最低. 前面两篇文章介绍了基于阿里云备份的跨云备份和云存储网关的跨云复制,两者主要是解决文件粒度的备份与恢复问题.如果用户需要保护一个云上的数据库应用,而不仅仅是数据库的数据文件:

混合云存储跨云灾备方案之跨云备份

摘要: 阿里云混合云存储团队的云存储网关,混合云备份和混合云容灾产品能够给用户提供完备的容灾方案,从而解决客户本地IDC到阿里云的混合云灾备场景和其他云厂商平台到阿里云的跨云灾备/多云灾备场景所遇到的问题.通过两次备份和一次恢复来演示混合云备份是如何备份用户云主机上的文件,备份增量数据和恢复用户数据的. 公有云市场现状,问题及趋势 从全球公有云市场来看,亚马逊AWS一枝独秀,占据了接近40%的市场份额.2017年全年,AWS营收为43.3亿美元,销售额为174.6亿美元.而在中国公有云市场,阿里

新浪SAE云空间和SVN版本控制

如何把自己的作品挂在网上,此前一直琢磨阿里云的虚拟服务器,苦于过高的费用,就一直没有实现.现如今新浪云提供了免费的云空间,可以把自己的作品挂网上供大家访问. 准备:1.新浪微博账号 2.邮箱 3.SVN版本管理工具 为大家分享SVN64位和32位 SVN64位链接:http://pan.baidu.com/s/1qWRqEFM  密码:728o SVN32位链接:http://pan.baidu.com/s/1kUhFPcV 密码:clex 4.webstrom神器