作者:劲吻2502877607 | 来源:互联网 | 2014-05-20 15:16
前面讲解的功能开发都是简单的调用API完成的,没有对数据库进行操作。在接下来的高级功能开发中,需要使用到数据库,所以在这一篇中,将对MySQL数据库的操作做一下简单的介绍,以供读者参考。
一、简介
前面讲解的功能开发都是简单的调用API 完成的,没有对数据库进行操作。在接下来的高级功能开发中,需要使用到数据库,所以在这一篇中,将对MySQL 数据库的操作做一下简单的介绍,以供读者参考。
二、思路分析
百度开发者中心提供了强大的云数据库(包括MySQL, MongoDB, Redis),在这一节教程中,我们将对大家比较熟悉的MySQL 数据库进行操作演示,实现微信与数据库的交互。
在BAE应用中使用云数据库十分简单,数据库列表中的名称即是连接数据库时的dbname。用户名、密码、连接地址和端口在应用中通过环境变量取出。
可使用标准的PHP Mysql 或PHP Mysqli 扩展访问数据库,BAE的PHP中已提供这两个扩展,应用可直接使用。
官方文档,请参考:http://developer.baidu.com/wiki/index.php?title=docs/cplat/rt/mysql
三、创建BAE MySQL数据库
3.1 登陆百度开发者中心 -> 管理中心 -> 选择应用 -> 云环境 -> 服务管理 -> MySQL(云数据库) -> 创建数据库
3.2 创建数据库
注意: 每个应用有且只有一个数据库享受1G免费配额,其余数据库均不享受免费配额优惠。只有将已使用免费配额的数据库删除,才能再次使用此项优惠。
3.3 创建成功
在这里可以看到数据库的名称,也就是dbname,后面会使用到。
点击 “phpMyadmin” 访问数据库。
3.4 phpMyadmin界面
新建数据表,输入表名及字段数,点击 “执行” 创建表。
3.5 创建表
输入字段名及字段类型,输入完毕后,点击下面的“保存”,完成表的创建。
3.6 创建完成
修改id 字段为主键并添加AUTO_INCREMENT;修改from_user 字段为唯一(UNIQUE),完成表的修改。
建表操作也可以使用以下SQL语句完成:
CREATE TABLE IF NOT EXISTS `test_mysql` (
`id` int (11 ) NOT NULL AUTO_INCREMENT,
`from_user` varchar (40 ) DEFAULT NULL ,
`account` varchar (40 ) DEFAULT NULL ,
`password` varchar (40 ) DEFAULT NULL ,
`update_time` datetime DEFAULT NULL , PRIMARY KEY (`id`), UNIQUE KEY `from_user` (`from_user`)
);
phpMyAdmin 操作
数据库及数据表的创建到此结束,下面将编写代码对数据库及数据表的使用做详细讲解。
四、官方示例(PHP MySQL)
BAE 官方提供的demo(PHP MySQL)示例如下:
mysql/basic.php 文件内容
php /* *
* MySQL示例,通过该示例可熟悉BAE平台MySQL的使用(CRUD) */ require_once ("../configure.php"); /* 替换为你自己的数据库名(可从管理中心查看到) */ $dbname = MYSQLNAME; /* 从环境变量里取出数据库连接需要的参数 */ $host = getenv ('HTTP_BAE_ENV_ADDR_SQL_IP'); $port = getenv ('HTTP_BAE_ENV_ADDR_SQL_PORT'); $user = getenv ('HTTP_BAE_ENV_AK'); $pwd = getenv ('HTTP_BAE_ENV_SK'); /* 接着调用mysql_connect()连接服务器 */ $link = @mysql_connect ("{$host }:{$port }",$user ,$pwd ,true ); if (!$link ) { die ("Connect Server Failed: " . mysql_error ());
} /* 连接成功后立即调用mysql_select_db()选中需要连接的数据库 */ if (!mysql_select_db ($dbname ,$link )) { die ("Select Database Failed: " . mysql_error ($link ));
} /* 至此连接已完全建立,就可对当前数据库进行相应的操作了 */ /* !!!注意,无法再通过本次连接调用mysql_select_db来切换到其它数据库了!!! */ /* 需要再连接其它数据库,请再使用mysql_connect+mysql_select_db启动另一个连接 */ /* *
* 接下来就可以使用其它标准php mysql函数操作进行数据库操作 */ // 创建一个数据库表 $sql = "create table if not exists test_mysql(
id int primary key auto_increment,
no int,
name varchar(1024),
key idx_no(no)) "; $ret = mysql_query ($sql , $link ); if ($ret === false ) { die ("Create Table Failed: " . mysql_error ($link ));
} else { echo "Create Table Succeed ";
} // 插入数据 $sql = "insert into test_mysql(no, name) values(2007,'this is a test message'),
(2008,'this is another test message'),
(2009,'xxxxxxxxxxxxxx') "; $ret = mysql_query ($sql , $link ); if ($ret === false ) { die ("Insert Failed: " . mysql_error ($link ));
} else { echo "Insert Succeed ";
} // 删除数据 $sql = "delete from test_mysql where no = 2008"; $ret = mysql_query ($sql , $link ); if ($ret === false ) { die ("Delete Failed: " . mysql_error ($link ));
} else { echo "Delete Succeed ";
} // 修改数据 $sql = "update test_mysql set name = 'yyyyyy' where no = 2009"; $ret = mysql_query ($sql , $link ); if ($ret === false ) { die ("Update Failed: " . mysql_error ($link ));
} else { echo "Update Succeed ";
} // 检索数据 $sql = "select id,no,name from test_mysql"; $ret = mysql_query ($sql , $link ); if ($ret === false ) { die ("Select Failed: " . mysql_error ($link ));
} else { echo "Select Succeed "; while ($row = mysql_fetch_assoc ($ret )) { echo "{$row ['id']} {$row ['no']} {$row ['name']} ";
}
} // 删除表 $sql = "drop table if exists test_mysql"; $ret = mysql_query ($sql , $link ); if ($ret === false ) { die ("Drop Table Failed: " . mysql_error ($link ));
} else { echo "Drop Table Succeed ";
} ?>
configure.php 文件内容
php /* **配置数据库名称** */ define ("MYSQLNAME", "qzMlSkByflhScPCOFtax"); ?>
测试使用:
执行成功。
五、修改成可调用的函数形式(PHP MySQL)
5.1 创建数据表
// 创建一个数据库表 function _create_table($sql ){ mysql_query ($sql ) or die ('创建表失败,错误信息:'.mysql_error ()); return "创建表成功";
}
5.2 插入数据
// 插入数据 function _insert_data($sql ){ if (!mysql_query ($sql )){ return 0; // 插入数据失败 }else { if (mysql_affected_rows ()>0){ return 1; // 插入成功 }else { return 2; // 没有行受到影响 }
}
}
5.3 删除数据
// 删除数据 function _delete_data($sql ){ if (!mysql_query ($sql )){ return 0; // 删除失败 }else { if (mysql_affected_rows ()>0){ return 1; // 删除成功 }else { return 2; // 没有行受到影响 }
}
}
5.4 修改数据
// 修改数据 function _update_data($sql ){ if (!mysql_query ($sql )){ return 0; // 更新数据失败 }else { if (mysql_affected_rows ()>0){ return 1; // 更新成功; }else { return 2; // 没有行受到影响 }
}
}
5.5 检索数据
// 检索数据 function _select_data($sql ){ $ret = mysql_query ($sql ) or die ('SQL语句有错误,错误信息:'.mysql_error ()); return $ret ;
}
5.6 删除数据表
// 删除表 function _drop_table($sql ){ mysql_query ($sql ) or die ('删除表失败,错误信息:'.mysql_error ()); return "删除表成功";
}
将以上函数和连接数据库的代码结合起来,生成mysql_bae.func.php 文件,供下面测试使用。
六、测试MySQL 函数使用
6.1 新建文件dev_mysql.php 在同一目录下并引入mysql_bae.func.php 文件
require_once './mysql_bae.func.php';
6.2 测试创建表
将上面使用phpMyAdmin 创建的test_mysql 表删除,测试语句如下:
// 创建表 $create_sql = "CREATE TABLE IF NOT EXISTS `test_mysql` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`from_user` varchar(40) DEFAULT NULL,
`account` varchar(40) DEFAULT NULL,
`password` varchar(40) DEFAULT NULL,
`update_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `from_user` (`from_user`)
) "; echo _create_table($create_sql );
测试正确结果:
到phpMyAdmin中查看
故意将SQL语句写错
测试错误结果:
6.3 测试插入数据
测试语句如下:
// 插入数据 $insert_sql = "insert into test_mysql(from_user, account, password, update_time) values('David','860510', 'abcabc', '2013-09-29 17:14:28')"; $res = _insert_data($insert_sql ); if ($res == 1){ echo "插入成功";
} else { echo "插入失败";
}
测试结果:
6.4 测试更新数据
测试语句如下:
// 更新数据 $update_sql = "update test_mysql set account = 860512 where account = 860510"; $res = _update_data($update_sql ); if ($res == 1){ echo "更新成功";
} elseif ($res == 0){ echo "更新失败";
} elseif ($res == 2){ echo "没有行受到影响";
}
测试结果:
再次更新:
6.5 测试删除数据
测试语句如下:
// 删除数据 $delete_sql = "delete from test_mysql where account = 860512"; $res = _delete_data($delete_sql ); if ($res == 1){ echo "删除成功";
} elseif ($res == 0){ echo "删除失败";
} elseif ($res == 2){ echo "没有该条记录";
}
测试结果:
再次删除:
6.6 测试检索数据
再次执行上面的插入操作做检索测试,测试语句如下:
// 检索数据 $select_sql = "select * from test_mysql"; $result = _select_data($select_sql ); while ($rows = mysql_fetch_array ($result ,MYSQL_ASSOC)){ echo $rows [id]."--".$rows [from_user]."--".$rows [account]."--".$rows [password]."--".$rows [update_time]; echo " ";
}
测试结果:
6.7 测试删除表
测试语句如下:
// 删除表 $drop_sql = "drop table if exists test_mysql"; echo _drop_table($drop_sql );
测试结果:
MySQL 函数测试全部成功。
七、实现与微信的交互(Mysql 扩展)
保证数据库中存在test_msyql表,这里测试微信对MySQL数据库的增删改查操作,不考虑特殊情况,只按照下面的方法测试:
1. 绑定+账户+密码
如:绑定+860512+abc123
2. 查询
如:查询
3. 修改+旧密码+新密码
如:修改+abc123+123456
4. 删除
如:删除
7.1 引入mysql_bae.func.php 文件
// 引入数据库函数文件 require_once 'mysql_bae.func.php';
7.2 前置操作
A. 将输入的语句拆分成数组,以“+”号分隔
$keywords = explode ("+",$keyword );
B. 获取当前时间
// 获取当前时间 $nowtime =date ("Y-m-d G:i:s");
C. 判断用户是否已经绑定
// 判断是否已经绑定 $select_sql ="SELECT id from test_mysql WHERE from_user='$fromUsername '"; $res =_select_data($select_sql ); $rows =mysql_fetch_array ($res , MYSQL_ASSOC); if ($rows [id] <> ''){ $user_flag ='y';
}
7.3 测试插入操作
测试代码:
if (trim ($keywords [0] == '绑定')){ if ($user_flag <> 'y'){ $insert_sql ="INSERT INTO test_mysql(from_user, account, password, update_time) VALUES('$fromUsername ','$keywords [1]','$keywords [2]','$nowtime ')";
var cpro_id = "u6885494";
推荐阅读
web前端|css教程css!importantweb前端-css教程本文分享css中提升优先级属性!important的用法总结微信门店展示源码,vscode如何管理站点,ubu ...
[详细]
蜡笔小新 2023-12-11 11:25:16
本文介绍了关系型数据库和NoSQL数据库的概念和特点,列举了主流的关系型数据库和NoSQL数据库,同时描述了它们在新闻、电商抢购信息和微博热点信息等场景中的应用。此外,还提供了MySQL配置文件的相关内容。 ...
[详细]
蜡笔小新 2023-12-10 15:47:11
nginx反向代理、动静分离、负载均衡及rewrite隐藏路径详解 ...
[详细]
蜡笔小新 2023-10-17 21:34:48
本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ...
[详细]
蜡笔小新 2023-12-14 17:15:19
本文介绍了众筹商城与传统商城的区别,包括所售产品和玩法不同以及运营方式不同。同时还提到了php众筹网站的程序源码和方维众筹的安装和环境问题。 ...
[详细]
蜡笔小新 2023-12-12 19:00:31
本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ...
[详细]
蜡笔小新 2023-12-12 12:45:59
篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ...
[详细]
蜡笔小新 2023-12-10 20:29:19
本文主要介绍了一位30岁+的程序员在一次上线事故中踩坑的经验之谈。文章提到了在双十一活动期间,作为一个在线医疗项目,他们进行了优惠折扣活动的升级改造。然而,在上线前的最后一天,由于大量数据请求,导致部分接口出现问题。作者通过部署两台opentsdb来解决问题,但读数据的opentsdb仍然经常假死。作者只能查询最近24小时的数据。这次事故给他带来了很多教训和经验。 ...
[详细]
蜡笔小新 2023-12-10 17:25:31
本文介绍了互联网思维中的三个段子,涵盖了餐饮行业、淘品牌和创业企业的案例。通过这些案例,探讨了互联网思维的九大分类和十九条法则。其中包括雕爷牛腩餐厅的成功经验,三只松鼠淘品牌的包装策略以及一家创业企业的销售额增长情况。这些案例展示了互联网思维在不同领域的应用和成功之道。 ...
[详细]
蜡笔小新 2023-12-10 14:58:10
最近有朋友去华为面试,面试经历包括四轮电话面试、一轮笔试、一轮主管视频面试、一轮hr视频面试。80%的人都在第一轮电话面试中失败,因为缺乏基础知识。面试问题涉及 ...
[详细]
蜡笔小新 2023-12-09 10:22:03
本文介绍了iOS开发中检测和解决内存泄漏的方法,包括静态分析、使用instruments检查内存泄漏以及代码测试等。同时还介绍了最能挣钱的行业,包括互联网行业、娱乐行业、教育行业、智能行业和老年服务行业,并提供了选行业的技巧。 ...
[详细]
蜡笔小新 2023-12-09 10:07:05
导读:今天编程笔记来给各位分享关于杭州PHP大厂有哪些的相关内容,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览: ...
[详细]
蜡笔小新 2023-10-17 20:53:07
一面自我介绍对象相等的判断,equals方法实现。可以简单描述挫折,并说明自己如何克服,最终有哪些收获。职业规划表明自己决心,首先自己不准备继续求学了,必须招工作了。希望去哪 ...
[详细]
蜡笔小新 2023-10-17 13:57:50
nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ...
[详细]
蜡笔小新 2023-10-16 20:04:07
一、前言在数据库中,慢查询日志通常是用来进行优化数据库,MySQL中存在慢查询,Mongodb中也是如此。在Mongo中的慢查询属于Mon ...
[详细]
蜡笔小新 2023-10-16 19:34:51
劲吻2502877607
这个家伙很懒,什么也没留下!