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的服务.具体的开启操作: ...
随机推荐
- 一个统计目录文件大小的php函数
早上刚到公司,头告诉我,抓紧写一个小函数,用来统计指定目录中文件大小,我了个去,动手吧,还好有点小基础,一会就完工了,哈哈.代码在下面咯. <? /** 统计目录文件大小的函数 @author ...
- Delphi XE5教程7:单元引用和uses 子句
内容源自Delphi XE5 UPDATE 2官方帮助<Delphi Reference>,本人水平有限,欢迎各位高人修正相关错误! 也欢迎各位加入到Delphi学习资料汉化中来,有兴趣者 ...
- WPF-控件-ListView
<Window x:Class="DataTemplate2.MainWindow" xmlns="http://schemas.microsoft.com/win ...
- Oracle物理的体系结构
体系结构图的学习: 老余服装店的故事 结构图: SQL查询语句 SGA 共享池shared pool 数据缓存区Buffer cache PGA 进程 SQL更新语句 SGA: 日志缓存区 日志文件 ...
- Eclipse中查看JDK类库的源代码
在Eclipse中查看JDK类库的源代码!!! 设置: 1.点 “window”-> "Preferences" -> "Java" -> & ...
- 从零开始学ios开发(十二):Table Views(上)
这次学习的控件非常重要且非常强大,是ios应用中使用率非常高的一个控件,可以说几乎每个app都会使用到它,它就是功能异常强大的Table Views.可以打开你的iphone中的phone.Messa ...
- per-project basis
Of course, HSQLDB connection parameters should be stored on a per-project basis, instead of only onc ...
- yii2怎样写规则可以隐藏url地址里的控制器名字
yii2怎样写规则可以隐藏url地址里的控制器名字,例如现在的是***.com/site/index.html要变成***.com/index.html '<action:index>.h ...
- 网络笔记01-2 scoket
scoket: 1.socket /** 第一个参数(domain): 表示用什么协议 AF_INET 为IPV4开发 第二个参数(type): 表示scoket为什么类型SOCK_STREAM为TC ...
- JDBC 学习笔记(三)—— 数据源(数据库连接池):DBCP数据源、C3P0 数据源以及自定义数据源技术
本文目录: 1.应用程序直接获取连接的缺点(图解) 2.使用数据库连接池优化程序性能(图解) 3.可扩展增强某个类方法的功能的三种方式 4.自定 ...