Sina App Engine(SAE)入门教程(2)-Mysql使用
如果你还没有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使用的更多相关文章
- Sina App Engine(SAE)入门教程(8)- SaeFetchurl使用
fetchurl是什么? FetchURL是SAE为开发者提供的分布式网页抓取服务,用来同步的抓取http页面,FetchURL针对国内的网络的做了优化,内部有调度系统,尽可能保证用户快速的抓取到目标 ...
- Sina App Engine(SAE)入门教程(3)-KVDB使用
简介 因为传统关系型数据库在分布式环境下表现的扩展性不足等缺点,近年来NoSQL的概念渐渐成为业界关注的焦点,越来越多的技术人员也习惯于使用NoSQL数据库进行日常开发,SAE为了应对这种新需求,也进 ...
- Sina App Engine(SAE)入门教程(1)
此教程只针对刚接触SAE的小白用户,资深码农.高手请绕道.首先还是一个经典的实例,hello sae. 创建应用 在注册完账号之后,需要到 http://sae.sina.com.cn/?m=myap ...
- Sina App Engine(SAE)入门教程(4)- SaeVCode(验证码服务)使用
参考资料 SaeVCode api 文档 使用教程 所有的验证码原理都是生成一个vcode字符串,存到session中,和用户的输入进行比较判断,以下是一个使用验证码服务的完整实例: 首页index. ...
- Sina App Engine(SAE)入门教程(7)- Storage使用
参考阅读 sae storage api 文档 Storage 说明文档 Storage 大文件上传说明 storage是什么? 因为sae禁用了代码环境的本地读写,但是在网站运行的过程中,必定会出现 ...
- Sina App Engine(SAE)入门教程(10)- Cron(定时任务)使用
参考资料 SAE Cron说明文档 Cron能干什么? cron 可以定时的触发一个脚本,在sae上最大的频率是一分钟一次.你可以用其来完成自己需要的业务逻辑,例如定期的抓取某些网页完菜信息的采集,定 ...
- Sina App Engine(SAE)入门教程(9)- SaeMail(邮件)使用
参考资料: SAE mail api 文档 怎么使用? 参见代码: <?php $mail = new SaeMail(); $f = new SaeFetchurl(); $img_data ...
- Sina App Engine(SAE)入门教程(6)- memcache使用
Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像.视频.文件以及数据库检索的结果等.简单的说就是将数据调用到内 ...
- Sina App Engine(SAE)入门教程(5)- SaeSegment(中文分词服务)使用
分词能干什么? 提取一篇文章的关键字 检测特定的段落中有没有违禁词 智能机器人 …..尽你所想 开启SAE 分词服务 首先你需要在sae的管理面板开始分词服务后才能使用sae的服务.具体的开启操作: ...
随机推荐
- python学习第四天第一部分
1.字典的特性:无序.去重.查询速度快.比list占用内存多. 2.字典查询速度快的原因:因为他是哈希类型的. 3.什么是(hash)哈希? hash把任意长度的二进制映射为较短的固定长度的二进制,这 ...
- 飞行器的Pitch Yaw Roll概念图解
前进方向为Z轴 Pitch 升降 绕X轴 对应常见Φ(phi)角: Yaw 偏航 绕Y轴 对应常见θ(theta)角: Roll 翻滚 绕Z轴 对应常见φ(psi)角: 对应表: 参考网址NASA: ...
- opencv学习笔记(04)——ROI
ROI的用法:1.直接相加:2.掩码法 #include <opencv2\highgui\highgui.hpp> #include <opencv2\imgproc\imgpro ...
- Oracle 主键
给student 表产生 自增的序列主键 increment ; ----IBATIS简单入门教程http://www.cnblogs.com/ycxyyzw/archive/2012/10/13/2 ...
- c++中string类的详解
,<时返回-1,==时返回0 string的子串:string substr(int pos = 0,int n = npos) const;//返回pos开始的n个字符组成的字符串strin ...
- cdev成员结构体file_operations文件操作结构的分析
struct file_operations{ struct module *owner; // 指向拥有该结构的模块的指针,避免正在操作时被卸载,一般为初始化为THIS_MODULES loff_t ...
- sql2008还原问题
2003的服务器系统不知是因为对SSD的支持不好还是别的原因,系统使用有很多奇怪的问题,所以就升级一下系统,在备份数据库的时候出现了各种问题 源数据库与现数据库都为sqlserver2008,并都安装 ...
- C++(MFC)
C++(MFC) 1.关联变量(与控件关联): (1)一组单选按钮:需要将第一个单选按钮的Group选项设为true,则单选按钮就为一组(组框为标示作用).选中第一个则为0,第二个为1,依次类推(P2 ...
- IOS开发实现录音功能
导入框架: ? 1 #import <AVFoundation/AVFoundation.h> 声明全局变量: ? 1 2 3 4 5 @interface ViewController ...
- 发现一个很好的android开发笔记库
http://linux.linuxidc.com/ 密码和用户名都是www.linuxidc.com android基础教程到高手进阶,游戏开发,数据存储,android架构等.谢谢网站主分享!