如果你还没有SAE的账号,请在http://sae.sina.com.cn 注册新用户。具体的注册流程请参见:Sina App Engine(SAE)入门教程(1)在常规的环境下,我们可以通过http://php.sinaapp.com/manual/zh/ref.mysql.php中PHP的原生函数去操作Mysql,但是由于SAE的环境问题,使用了主从分离技术,因此我们对数据库的操纵做了一次封装,当然你也可以继续使用这种方式去操作mysql。你可以如下使用。首先得到数据库连接的主机名,账号,密码,端口。你可以在sae上运行一下的脚本:

获取连接信息

<?php
header("Content-Type:text/html;charset=utf-8");
echo "用户名:".SAE_MYSQL_USER."<br>";
echo "密码:". SAE_MYSQL_PASS.'<br>';
echo "主库域名:".SAE_MYSQL_HOST_M."<br>";
echo "从库域名:".SAE_MYSQL_HOST_S."<br>";
echo "端口".SAE_MYSQL_PORT."<br>";
echo "数据库名:".SAE_MYSQL_DB."<br>";
?>

可以得到如下信息:

用户名:k5nmzy5445
密码:lzxkxy0x2iyili3k113iiw1mz5kimlwk33j5wyl1
主库域名:w.rdc.sae.sina.com.cn
从库域名:r.rdc.sae.sina.com.cn
端口3307
数据库名:app_lazydemo

访问 http://1.lazydemo.sinaapp.com/saemysql/mysqlcontant.php查看掩饰。

这样我们就得到了SAE的数据库连接信息,那么我们就可以按照常规的方式连接我们的mysql了,注意最好不要直接使用上面打出来的信息而是使用sae提供的常量名,因为可能这些信息是会发生变化的,如果变化那么你在写死的情况下可能就会出现无法连接数据库的错误了。下面就是一个常规方式连接SAE Mysql的例子。

<?php
$hostname = SAE_MYSQL_HOST_M.':'.SAE_MYSQL_PORT;
$dbuser = SAE_MYSQL_USER;
$dbpass = SAE_MYSQL_PASS;
$dbname = SAE_MYSQL_DB;
$link = mysql_connect($hostname, $dbuser, $dbpass);
if (!$link) {
    die('Could not connect: ' . mysql_error());
}
echo 'Connected successfully<br/>';
//select db
mysql_select_db($dbname, $link) or die ('Can\'t use dbname : ' . mysql_error());
echo 'Select db '.$dbname.' successfully';
mysql_close($link);
?>

可以访问http://1.lazydemo.sinaapp.com/saemysql/connect_common.php 查看演示,可以得到结果:

Connected successfully
Select db app_lazydemo successfully

使用SaeMysql

但是明显可以看到以上的代码中只使用到了主库,当然也可以自己实现脚本实现读写分离:) 由于本教程只供入门使用,此处不再提供。没有用到SAE提供的主从分离,因此我们还是建议使用SAE封装好的SaeMysql操作类来操作数据库,相比于以上的方法,使用SaeMysql就简单的多了,我们只需要如下的脚本就完成了数据库的连接和数据库的选择,

<?php
$mysql = new SaeMysql();
?>

以下从一个简单的数据库操作实例来展示SaeMysql的使用,首先创建一个简单的数据表(在自己练习的时候可以直接导入压缩包中的mysqldemo.sql),先看看表的结构:

CREATE TABLE IF NOT EXISTS `mysqldemo` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `content` text COLLATE utf8_unicode_ci NOT NULL,
  `timeline` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;

看得出只有简单的三个字段id,content,timeline。由于现在的数据表是空的,我们就先来插入几条数据,写一个循环吧,代码如下:

<?php
$mysql = new SaeMysql();
for($i = 1;$i < 11;$i++)
{
        $timeline = date('Y-m-d H:i:s',time());
        $content = 'This num is'.$i;
        $sql = "insert into mysqldemo(content,timeline)values('$content','$timeline')";
        $mysql->runSql($sql);
}
//close db connection
$mysql->closeDb();
?>

我们访问下写的代码插入数据,可以看到:

数据已经写进去了。那么下面就演示下如何用SaeMysql其他的函数对其进行操作。

<?php
$mysql = new SaeMysql();
//查询单条数据
$sql = "select * from mysqldemo limit 1";
$result = $mysql->getLine($sql);
var_dump($result);
//发现这个已经是按数组的方式返回的
echo "<hr>";
//查询多条数据
$sql = "select * from mysqldemo";
$mut_data = $mysql->getData($sql);
var_dump($mut_data);
//发现这个就是按二维数组输出的了,下面一个foreach输出
echo "<hr>";
foreach($mut_data as $small)
{
        echo "No ".$small['id']." Content:".$small['content'].' Timeline:'.$small['timeline'].'<br>';
}
?>

可以看到输出是:

array(3) { ["id"]=> string(1) "1" ["content"]=> string(12) "This num is1" ["timeline"]=> string(19) "2012-10-23 13:55:21" }
array(10) { [0]=> array(3) { ["id"]=> string(1) "1" ["content"]=> string(12) "This num is1" ["timeline"]=> string(19) "2012-10-23 13:55:21" } [1]=> array(3) { ["id"]=> string(1) "2" ["content"]=> string(12) "This num is2" ["timeline"]=> string(19) "2012-10-23 13:55:21" } [2]=> array(3) { ["id"]=> string(1) "3" ["content"]=> string(12) "This num is3" ["timeline"]=> string(19) "2012-10-23 13:55:21" } [3]=> array(3) { ["id"]=> string(1) "4" ["content"]=> string(12) "This num is4" ["timeline"]=> string(19) "2012-10-23 13:55:21" } [4]=> array(3) { ["id"]=> string(1) "5" ["content"]=> string(12) "This num is5" ["timeline"]=> string(19) "2012-10-23 13:55:21" } [5]=> array(3) { ["id"]=> string(1) "6" ["content"]=> string(12) "This num is6" ["timeline"]=> string(19) "2012-10-23 13:55:21" } [6]=> array(3) { ["id"]=> string(1) "7" ["content"]=> string(12) "This num is7" ["timeline"]=> string(19) "2012-10-23 13:55:21" } [7]=> array(3) { ["id"]=> string(1) "8" ["content"]=> string(12) "This num is8" ["timeline"]=> string(19) "2012-10-23 13:55:21" } [8]=> array(3) { ["id"]=> string(1) "9" ["content"]=> string(12) "This num is9" ["timeline"]=> string(19) "2012-10-23 13:55:21" } [9]=> array(3) { ["id"]=> string(2) "10" ["content"]=> string(13) "This num is10" ["timeline"]=> string(19) "2012-10-23 13:55:21" } }
No 1 Content:This num is1 Timeline:2012-10-23 13:55:21
No 2 Content:This num is2 Timeline:2012-10-23 13:55:21
No 3 Content:This num is3 Timeline:2012-10-23 13:55:21
No 4 Content:This num is4 Timeline:2012-10-23 13:55:21
No 5 Content:This num is5 Timeline:2012-10-23 13:55:21
No 6 Content:This num is6 Timeline:2012-10-23 13:55:21
No 7 Content:This num is7 Timeline:2012-10-23 13:55:21
No 8 Content:This num is8 Timeline:2012-10-23 13:55:21
No 9 Content:This num is9 Timeline:2012-10-23 13:55:21
No 10 Content:This num is10 Timeline:2012-10-23 13:55:21

也可以直接访问:http://lazydemo.sinaapp.com/saemysql/query_mysql.php

学习SaeMySQL 资料参考:

本部门代码打包下载:

点此下载

Sina App Engine(SAE)入门教程(2)-Mysql使用的更多相关文章

  1. Sina App Engine(SAE)入门教程(8)- SaeFetchurl使用

    fetchurl是什么? FetchURL是SAE为开发者提供的分布式网页抓取服务,用来同步的抓取http页面,FetchURL针对国内的网络的做了优化,内部有调度系统,尽可能保证用户快速的抓取到目标 ...

  2. Sina App Engine(SAE)入门教程(3)-KVDB使用

    简介 因为传统关系型数据库在分布式环境下表现的扩展性不足等缺点,近年来NoSQL的概念渐渐成为业界关注的焦点,越来越多的技术人员也习惯于使用NoSQL数据库进行日常开发,SAE为了应对这种新需求,也进 ...

  3. Sina App Engine(SAE)入门教程(1)

    此教程只针对刚接触SAE的小白用户,资深码农.高手请绕道.首先还是一个经典的实例,hello sae. 创建应用 在注册完账号之后,需要到 http://sae.sina.com.cn/?m=myap ...

  4. Sina App Engine(SAE)入门教程(4)- SaeVCode(验证码服务)使用

    参考资料 SaeVCode api 文档 使用教程 所有的验证码原理都是生成一个vcode字符串,存到session中,和用户的输入进行比较判断,以下是一个使用验证码服务的完整实例: 首页index. ...

  5. Sina App Engine(SAE)入门教程(7)- Storage使用

    参考阅读 sae storage api 文档 Storage 说明文档 Storage 大文件上传说明 storage是什么? 因为sae禁用了代码环境的本地读写,但是在网站运行的过程中,必定会出现 ...

  6. Sina App Engine(SAE)入门教程(10)- Cron(定时任务)使用

    参考资料 SAE Cron说明文档 Cron能干什么? cron 可以定时的触发一个脚本,在sae上最大的频率是一分钟一次.你可以用其来完成自己需要的业务逻辑,例如定期的抓取某些网页完菜信息的采集,定 ...

  7. Sina App Engine(SAE)入门教程(9)- SaeMail(邮件)使用

    参考资料: SAE mail api 文档 怎么使用? 参见代码: <?php $mail = new SaeMail(); $f = new SaeFetchurl(); $img_data ...

  8. Sina App Engine(SAE)入门教程(6)- memcache使用

    Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像.视频.文件以及数据库检索的结果等.简单的说就是将数据调用到内 ...

  9. Sina App Engine(SAE)入门教程(5)- SaeSegment(中文分词服务)使用

    分词能干什么? 提取一篇文章的关键字 检测特定的段落中有没有违禁词 智能机器人 …..尽你所想 开启SAE 分词服务 首先你需要在sae的管理面板开始分词服务后才能使用sae的服务.具体的开启操作: ...

随机推荐

  1. Enhanced RCP: How views can communicate – The e4 way | Tomsondev Blog

    Some weeks ago I published how views can communicate using the EventAdmin-Service. To get things wor ...

  2. 全民wifi钓鱼来临----agnes安卓wifi钓鱼神器介绍

    断断续续搞了一些无线的东西,从bt5的aircrack-ng的破无线(没怎么成功过)其实EWSA这个用GPU跑还算不错,可惜了我这显卡也只能每秒2500,到用c118在OsmocomBB基础上进行gs ...

  3. Vbox安装oracle-linux报错:VT-x features locked or unavailable in M

    1.安装完Vbox后,通过vbox来安装oracle-linux时报“VT-x features locked or unavailable in MSR”: 2.报错原因:CPU没有开启虚拟化支持 ...

  4. 【正则】精通JS正则表达式,没消化 信息量太大,好文

    http://www.jb51.net/article/25313.htm 正则表达式可以: •测试字符串的某个模式.例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个信用 ...

  5. 野指针及c++指针使用注意点

    避免野指针的产生 “野指针”的成因主要有: 1)指针变量没有被初始化.任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气.所以,指针变量在创建的同时应当被初始化,要么将指 ...

  6. 高级php面试题及部分答案

    在网上看到一些高级php 的面试题目.. 闲来无事,搞了一些答案...可能不是很全面,留这以后备用吧. 一. 基本知识点1.1 HTTP协议中几个状态码的含义:503 500 401 403 404 ...

  7. 深入理解用mysql_fetch_row()以数组的形式返回查询结果

    同mysql_result()一样,mysql_fetch_row()也可以用来获取查询结果集,其区别在于函数的返回值不是一个字符串,而是一个数组.函数定义如下. 复制代码 代码如下: array m ...

  8. oracle 常用SQL语法手册

    Select 用途: 从指定表中取出指定的列的数据 语法: SELECT column_name(s) FROM table_name 解释: 从数据库中选取资料列,并允许从一或多个资料表中,选取一或 ...

  9. OpenWrt固件刷入后串口终端没有反应的问题

    [路由器开发板硬件固件配置] MTK双频:MT7620a + MT7612e 内存:256 MB 闪存:16 MB 固件:MTK自带SDK中的OpenWrt固件(mtksdk-openwrt-2.6. ...

  10. tomcat绑定域名

    现在很多的公司的网站都是用tomcat作为应用服务区的,可是对于初学者,8080端口号是如何去掉的,这些网站是如何和域名绑定到一起的呢?一个tomcat是如何绑定多域名?并且这些域名是如何对应不同的项 ...