一、简介
前面讲解的功能开发都是简单的调用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语句完成:
Code:
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 文件内容
Code:
<?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<br />";
}
//插入数据
$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<br />";
}
//删除数据
$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<br />";
}
//修改数据
$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<br />";
}
//检索数据
$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<br />";
while ($row = mysql_fetch_assoc($ret)) {
echo "{$row['id']} {$row['no']} {$row['name']}<br />";
}
}
//删除表
$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<br />";
}
?>
configure.php 文件内容
Code:
<?php
/***配置数据库名称***/
define("MYSQLNAME", "qzMlSkByflhScPCOFtax");
?>
测试使用:
执行成功。
五、修改成可调用的函数形式(PHP MySQL)
5.1 创建数据表
Code:
//创建一个数据库表
function _create_table($sql){
mysql_query($sql) or die('创建表失败,错误信息:'.mysql_error());
return "创建表成功";
}
5.2 插入数据
Code:
//插入数据
function _insert_data($sql){
if(!mysql_query($sql)){
return 0; //插入数据失败
}else{
if(mysql_affected_rows()>0){
return 1; //插入成功
}else{
return 2; //没有行受到影响
}
}
}
5.3 删除数据
Code:
//删除数据
function _delete_data($sql){
if(!mysql_query($sql)){
return 0; //删除失败
}else{
if(mysql_affected_rows()>0){
return 1; //删除成功
}else{
return 2; //没有行受到影响
}
}
}
5.4 修改数据
Code:
//修改数据
function _update_data($sql){
if(!mysql_query($sql)){
return 0; //更新数据失败
}else{
if(mysql_affected_rows()>0){
return 1; //更新成功;
}else{
return 2; //没有行受到影响
}
}
}
5.5 检索数据
Code:
//检索数据
function _select_data($sql){
$ret = mysql_query($sql) or die('SQL语句有错误,错误信息:'.mysql_error());
return $ret;
}
5.6 删除数据表
Code:
//删除表
function _drop_table($sql){
mysql_query($sql) or die('删除表失败,错误信息:'.mysql_error());
return "删除表成功";
}