Heim  >  Artikel  >  WeChat-Applet  >  Betrieb der Entwicklungsdatenbank der öffentlichen WeChat-Plattform

Betrieb der Entwicklungsdatenbank der öffentlichen WeChat-Plattform

高洛峰
高洛峰Original
2017-03-06 09:51:583854Durchsuche

1. Einführung

Die zuvor erläuterte Funktionsentwicklung wird durch einfachen Aufruf der API abgeschlossen, ohne die Datenbank zu bedienen. Bei der späteren Entwicklung erweiterter Funktionen muss eine Datenbank verwendet werden. Daher wird in diesem Artikel eine kurze Einführung in die Funktionsweise der MySQL-Datenbank als Referenz für die Leser bereitgestellt.

2. Ideenanalyse

Baidu Developer Center stellt leistungsstarke Cloud-Datenbanken (einschließlich MySQL, MongoDB, Redis) vor Betriebsdemonstrationen zur Realisierung der Interaktion zwischen WeChat und der Datenbank.

Es ist sehr einfach, die Cloud-Datenbank in der BAE-Anwendung zu verwenden. Der Name in der Datenbankliste ist der Datenbankname, wenn eine Verbindung zur Datenbank hergestellt wird. Benutzername, Passwort, Verbindungsadresse und Port werden über Umgebungsvariablen in der Anwendung abgerufen.

Sie können die Standarderweiterung PHP Mysql oder PHP Mysqli verwenden, um auf die Datenbank zuzugreifen. Diese beiden Erweiterungen sind bereits in BAEs PHP enthalten und können direkt von der Anwendung verwendet werden.

Offizielle Dokumentation finden Sie unter: ttp://developer.baidu.com/wiki/index.php?title=docs/cplat/rt/mysql

3. Erstellen Sie eine BAE-MySQL-Datenbank

3.1 Anmelden beim Baidu Developer Center-> 🎜>

Betrieb der Entwicklungsdatenbank der öffentlichen WeChat-Plattform3.2 Datenbank erstellen

Betrieb der Entwicklungsdatenbank der öffentlichen WeChat-PlattformHinweis: Jede Anwendung verfügt über eine und nur eine Datenbank, die das kostenlose 1G-Kontingent genießt, und die anderen Datenbanken Genießen Sie nicht den kostenlosen Kontingentrabatt. Dieses Angebot kann nur erneut genutzt werden, wenn die Datenbank, die das kostenlose Kontingent verbraucht hat, gelöscht wird.

3.3 Erfolgreich erstellt

Hier sehen Sie den Namen der Datenbank, dbname, der später verwendet wird.

Klicken Sie auf „phpMyadmin“, um auf die Datenbank zuzugreifen.

Betrieb der Entwicklungsdatenbank der öffentlichen WeChat-Plattform3.4 phpMyadmin-Schnittstelle

Erstellen Sie eine neue Datentabelle, geben Sie den Tabellennamen und die Anzahl der Felder ein und klicken Sie auf „Ausführen“, um die Tabelle zu erstellen.

Betrieb der Entwicklungsdatenbank der öffentlichen WeChat-Plattform3.5 Tabelle erstellen

Geben Sie den Feldnamen und den Feldtyp ein. Klicken Sie nach der Eingabe unten auf „Speichern“, um die Erstellung der Tabelle abzuschließen.

Betrieb der Entwicklungsdatenbank der öffentlichen WeChat-Plattform3.6 Erstellung abgeschlossen

Ändern Sie das ID-Feld als Primärschlüssel und fügen Sie AUTO_INCREMENT hinzu; ändern Sie das from_user-Feld in eindeutig (UNIQUE), um die Änderung abzuschließen der Tisch.

Betrieb der Entwicklungsdatenbank der öffentlichen WeChat-PlattformDer Tabellenerstellungsvorgang kann auch mit der folgenden SQL-Anweisung abgeschlossen werden:

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-Vorgang

Betrieb der Entwicklungsdatenbank der öffentlichen WeChat-PlattformDamit ist die Erstellung der Datenbank und der Datentabelle abgeschlossen. Im Folgenden schreiben wir Code, um die Verwendung der Datenbank und der Datentabelle im Detail zu erläutern.

4. Offizielles Beispiel (PHP MySQL)

Das von BAE offiziell bereitgestellte Demo-Beispiel (PHP MySQL) lautet wie folgt:

Inhalt der Datei mysql/basic.php

<?php /**
 * MySQL示例,通过该示例可熟悉BAE平台MySQL的使用(CRUD)
 */
require_once("../configure.php");
    /*替换为你自己的数据库名(可从管理中心查看到)*/
    $dbname = MYSQLNAME;
     
    /*从环境变量里取出数据库连接需要的参数*/
    $host = getenv(&#39;HTTP_BAE_ENV_ADDR_SQL_IP&#39;);
    $port = getenv(&#39;HTTP_BAE_ENV_ADDR_SQL_PORT&#39;);
    $user = getenv(&#39;HTTP_BAE_ENV_AK&#39;);
    $pwd = getenv(&#39;HTTP_BAE_ENV_SK&#39;);
    
    /*接着调用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>";
    }


?>

Inhalt der .php-Datei konfigurieren

<?php     /***配置数据库名称***/
    define("MYSQLNAME", "qzMlSkByflhScPCOFtax");

?>

Testverwendung:

Betrieb der Entwicklungsdatenbank der öffentlichen WeChat-PlattformErfolgreich ausgeführt.

5. In aufrufbare Funktionsform ändern (PHP MySQL)

5.1 Datentabelle erstellen

//创建一个数据库表
function _create_table($sql){
    mysql_query($sql) or die('创建表失败,错误信息:'.mysql_error());
    return "创建表成功";
}

5.2 Einfügen Daten

//插入数据
function _insert_data($sql){
      if(!mysql_query($sql)){
        return 0;    //插入数据失败
    }else{
          if(mysql_affected_rows()>0){
              return 1;    //插入成功
          }else{
              return 2;    //没有行受到影响
          }
    }
}

5.3 Daten löschen

//删除数据
function _delete_data($sql){
      if(!mysql_query($sql)){
        return 0;    //删除失败
      }else{
          if(mysql_affected_rows()>0){
              return 1;    //删除成功
          }else{
              return 2;    //没有行受到影响
          }
    }
}

5.4 Daten ändern

//修改数据
function _update_data($sql){
      if(!mysql_query($sql)){
        return 0;    //更新数据失败
    }else{
          if(mysql_affected_rows()>0){
              return 1;    //更新成功;
          }else{
              return 2;    //没有行受到影响
          }
    }
}

5.5 Daten abrufen

//检索数据
function _select_data($sql){
    $ret = mysql_query($sql) or die('SQL语句有错误,错误信息:'.mysql_error());
    return $ret;
}

5.6 Datentabelle löschen

//删除表
function _drop_table($sql){
    mysql_query($sql) or die('删除表失败,错误信息:'.mysql_error());
    return "删除表成功";
}

Kombinieren Sie die oben genannten Funktionen mit dem Code, um eine Verbindung zur Datenbank herzustellen und die Datei mysql_bae.func.php für die folgenden Tests zu generieren.

6. Testen Sie die MySQL-Funktionsnutzung

6.1 Erstellen Sie eine neue Datei dev_mysql.php im selben Verzeichnis und führen Sie die Datei mysql_bae.func.php ein

require_once './mysql_bae.func.php';

6.2 Testerstellungstabelle

Löschen Sie die oben mit phpMyAdmin erstellte test_mysql-Tabelle. Die Testanweisung lautet wie folgt:

//创建表
$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);

测试正确结果:

Betrieb der Entwicklungsdatenbank der öffentlichen WeChat-Plattform 

到phpMyAdmin中查看

Betrieb der Entwicklungsdatenbank der öffentlichen WeChat-Plattform

故意将SQL语句写错

Betrieb der Entwicklungsdatenbank der öffentlichen WeChat-Plattform

测试错误结果:

Betrieb der Entwicklungsdatenbank der öffentlichen WeChat-Plattform

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 "插入失败";
}

测试结果:

Betrieb der Entwicklungsdatenbank der öffentlichen WeChat-Plattform

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 "没有行受到影响";
}

测试结果:

Betrieb der Entwicklungsdatenbank der öffentlichen WeChat-Plattform

再次更新:

Betrieb der Entwicklungsdatenbank der öffentlichen WeChat-Plattform

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 "没有该条记录";
}

测试结果:

Betrieb der Entwicklungsdatenbank der öffentlichen WeChat-Plattform

再次删除:

Betrieb der Entwicklungsdatenbank der öffentlichen WeChat-Plattform

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 "<br>";

}

测试结果:

Betrieb der Entwicklungsdatenbank der öffentlichen WeChat-Plattform

6.7 测试删除表

测试语句如下:

//删除表$drop_sql = "drop table if exists test_mysql";echo _drop_table($drop_sql);

测试结果:

Betrieb der Entwicklungsdatenbank der öffentlichen WeChat-Plattform

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')";
        $res = _insert_data($insert_sql);
        if($res == 1){
            $contentStr = "绑定成功";
        }elseif($res == 0){
            $contentStr = "绑定失败";
        }
    }else{
        $contentStr = "该账户已绑定";
    }
}

测试结果:

Betrieb der Entwicklungsdatenbank der öffentlichen WeChat-Plattform

7.4 测试查询操作

测试代码:

if(trim($keywords[0] == '查询')){
    $select_sql="SELECT * FROM test_mysql WHERE from_user='$fromUsername'";
    $select_res=_select_data($select_sql);
    $rows=mysql_fetch_assoc($select_res);
    if($rows[id]  ''){
    $contentStr="账户:$rows[account]\n"."密码:$rows[password]\n"."From_user:$rows[from_user]\n"."更新时间:$rows[update_time]";
    }else{
    $contentStr="您还未绑定账户,查询不到相关信息,请先绑定,谢谢!";
    }
}

测试结果:

Betrieb der Entwicklungsdatenbank der öffentlichen WeChat-Plattform

7.5 测试更新操作

测试代码:

if(trim($keywords[0] == "修改")){
    $old_password=$keywords[1];
    $new_password=$keywords[2];
    $select_password_sql="SELECT * FROM test_mysql WHERE from_user='$fromUsername'";
    $select_res=_select_data($select_password_sql);
    $rows=mysql_fetch_assoc($select_res);
    if($old_password == $rows[password]){
        $update_sql="UPDATE test_mysql SET password='$new_password' WHERE from_user='$fromUsername'";
        $res = _update_data($update_sql);
        if($res == 1){
            $contentStr = "修改成功";
        }elseif($res == 0){
            $contentStr = "修改失败";
        }
    }else{
        $contentStr = "原密码有误,请确认后重试";
    }
}

测试结果:

Betrieb der Entwicklungsdatenbank der öffentlichen WeChat-Plattform

7.6 测试删除操作

测试代码:

if(trim($keywords[0] == "删除")){
    $delete_sql="DELETE FROM test_mysql WHERE from_user='$fromUsername'";
    $res = _delete_data($delete_sql);
    if($res == 1){
        $contentStr = "删除成功";
    }elseif($res == 0){
        $contentStr = "删除失败";
    }
}

测试结果:

Betrieb der Entwicklungsdatenbank der öffentlichen WeChat-Plattform

与微信的交互测试成功。

八、PHP Mysqli 扩展,封装成类

将Mysqli 扩展封装成类使用,代码如下:

<?php require_once &#39;includes/configure.php&#39;;

class MySQLi_BAE{

    private $mysqli;
    private $host;
    private $user;
    private $password;
    private $port;
    private $database;

    //在类之外访问私有变量时使用
    function __get($property_name){
        if(isset($this->$property_name)){
            return($this->$property_name);
        }else{
            return(NULL);
        }    
    }

    function __set($property_name, $value){
        $this->$property_name=$value;
    }

    function __construct(){

        /*从平台获取查询要连接的数据库名称*/
        $this->database = MYSQLNAME;

        /*从环境变量里取出数据库连接需要的参数*/
        $this->host = getenv('HTTP_BAE_ENV_ADDR_SQL_IP');
        $this->user = getenv('HTTP_BAE_ENV_AK');
        $this->password = getenv('HTTP_BAE_ENV_SK');
        $this->port = getenv('HTTP_BAE_ENV_ADDR_SQL_PORT');

        $this->mysqli = new mysqli($this->host, $this->user, $this->password, $this->database, $this->port);
        if($this->mysqli->connect_error){
            die("Connect Server Failed:".$this->mysqli->error);
        }
        
        $this->mysqli->query("set names utf8");
    }

    //dql statement
    function execute_dql($query){
        
        $res = $this->mysqli->query($query) or die("操作失败".$this->mysqli->error);
        return $res;
        
        //$this->mysqli->close();
    }

    //dml statement
    function execute_dml($query){
        
        $res = $this->mysqli->query($query) or die("操作失败".$this->mysqli->error);
        
        if(!$res){
            return 0;//失败
        }else{
            if($this->mysqli->affected_rows > 0){
                return 1;//执行成功
            }else{
                return 2;//没有行受影响
            }
        }
    
        //$this->mysqli->close();
    }
}
?>

九、测试类的使用

9.1 测试DML操作

测试代码:

<?php require_once "MySQLi_BAE.class.php";

$mysqli_BAE=new MySQLi_BAE();


//**************dml*******************
$sql="insert into test_mysql (from_user, account, password, update_time) values(&#39;David&#39;,&#39;860510&#39;, &#39;abcabc&#39;, &#39;2013-09-27 17:14:28&#39;)";

//$sql="update test_mysql set account = 860512 where account = 860510";

//$sql="delete from test_mysql where account = 860512";

$res=$mysqli_BAE->execute_dml($sql);

if($res==0){
    echo "执行失败";
}elseif($res==1){
    echo "执行成功";
}else{
    echo "没有行数影响";
}
?>

测试结果:

Betrieb der Entwicklungsdatenbank der öffentlichen WeChat-Plattform

9.2 测试DQL操作

测试代码:

<?php require_once "MySQLi_BAE.class.php";

$mysqli_BAE=new MySQLi_BAE();

//**************dql******************
$sql="select * from test_mysql";

$res=$mysqli_BAE->execute_dql($sql);

while($row=$res->fetch_row()){
    
    foreach($row as $key=>$val){
        echo "$val--";
    }
    echo '<br>';
}

$res->free();
?>

测试结果:

Betrieb der Entwicklungsdatenbank der öffentlichen WeChat-Plattform

十、实现与微信的交互(Mysqli 扩展)

10.1 前置操作

A. 引入MySQLi_BAE.class.php 文件

//引入数据库函数文件require_once "MySQLi_BAE.class.php";

B. 实例化对象

public function __construct()
{    $this->mysqli_BAE=new MySQLi_BAE();
}

10.2 测试插入操作

测试代码:

$insert_sql="INSERT INTO test_mysql(from_user, account, password, update_time) VALUES('$fromUsername','$keywords[1]','$keywords[2]','$nowtime')";
$res = $this->mysqli_BAE->execute_dml($insert_sql);

测试结果:

Betrieb der Entwicklungsdatenbank der öffentlichen WeChat-Plattform

10.3 测试查询操作

测试代码:

$select_sql="SELECT * FROM test_mysql WHERE from_user='$fromUsername'";
$select_res=$this->mysqli_BAE->execute_dql($select_sql);
$rows=$select_res->fetch_array(MYSQLI_ASSOC);

测试结果:

Betrieb der Entwicklungsdatenbank der öffentlichen WeChat-Plattform

10.4 测试更新操作

测试代码:

$update_sql="UPDATE test_mysql SET password='$new_password' WHERE from_user='$fromUsername'"; 
$res = $this->mysqli_BAE->execute_dml($update_sql);

测试结果:

Betrieb der Entwicklungsdatenbank der öffentlichen WeChat-Plattform

10.5 测试删除操作

测试代码:

$delete_sql="DELETE FROM test_mysql WHERE from_user='$fromUsername'";
$res = $this->mysqli_BAE->execute_dml($delete_sql);

测试结果:

Betrieb der Entwicklungsdatenbank der öffentlichen WeChat-Plattform

与微信交互测试成功。 

更多Betrieb der Entwicklungsdatenbank der öffentlichen WeChat-Plattform相关文章请关注PHP中文网!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn