首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

微信公眾平台開發實戰:BAE 雲環境下 MySQL/MongoDB 數據庫操作與微信交互完整教程

     編輯:MySQL 資料庫相關知識

一、 BAE 雲數據庫準備

  1. 管理中心 → 服務管理 → MySQL → 創建數據庫(名稱即 dbname)
  2. 點擊 phpMyAdmin 創建表 test_mysql:
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`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

二、 環境變量獲取連接參數

$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');
$dbname = '你的數據庫名稱';  // 管理中心查看

三、 MySQL 擴展封裝通用函數

// 連接
$link = @mysql_connect("{$host}:{$port}", $user, $pwd, true);
mysql_select_db($dbname, $link);
mysql_query("SET NAMES utf8", $link);

// CRUD 封裝
function _insert_data($sql) {
    if (!mysql_query($sql)) return 0;
    return mysql_affected_rows() > 0 ? 1 : 2;
}
function _update_data($sql) { /* 同 insert */ }
function _delete_data($sql) { /* 同 insert */ }
function _select_data($sql) {
    return mysql_query($sql) or die(mysql_error());
}

四、 微信消息交互邏輯實現

關鍵字格式:

  • 綁定+賬戶+密碼 → 插入
  • 查詢 → 查詢
  • 修改+舊密碼+新密碼 → 更新
  • 刪除 → 刪除
$keywords = explode('+', $keyword);
$fromUsername = $xmlObj->FromUserName;
$now = date('Y-m-d H:i:s');

// 判斷是否已綁定
$res = _select_data("SELECT id FROM test_mysql WHERE from_user='$fromUsername'");
$row = mysql_fetch_assoc($res);
$bound = $row['id'] ? true : false;

if ($keywords[0] === '綁定') {
    if (!$bound) {
        $sql = "INSERT INTO test_mysql(from_user,account,password,update_time)
                VALUES('$fromUsername','{$keywords[1]}','{$keywords[2]}','$now')";
        $ret = _insert_data($sql);
        $contentStr = $ret==1 ? '綁定成功' : '綁定失敗';
    } else $contentStr = '該賬戶已綁定';
}
elseif ($keywords[0] === '查詢') {
    if ($bound) {
        $row = mysql_fetch_assoc(_select_data("SELECT * FROM test_mysql WHERE from_user='$fromUsername'"));
        $contentStr = "賬戶:{$row['account']}\n密碼:{$row['password']}\n更新時間:{$row['update_time']}";
    } else $contentStr = '請先綁定';
}
elseif ($keywords[0] === '修改') {
    $row = mysql_fetch_assoc(_select_data("SELECT * FROM test_mysql WHERE from_user='$fromUsername'"));
    if ($row && $keywords[1] === $row['password']) {
        $sql = "UPDATE test_mysql SET password='{$keywords[2]}' WHERE from_user='$fromUsername'";
        $contentStr = _update_data($sql)==1 ? '修改成功' : '修改失敗';
    } else $contentStr = '原密碼錯誤';
}
elseif ($keywords[0] === '刪除') {
    $contentStr = _delete_data("DELETE FROM test_mysql WHERE from_user='$fromUsername'")==1 ? '刪除成功' : '刪除失敗';
}

五、 mysqli 面向對象封裝(推薦生產使用)

class MySQLi_BAE {
    private $mysqli;
    public function __construct() {
        $this->mysqli = new mysqli(
            getenv('HTTP_BAE_ENV_ADDR_SQL_IP'),
            getenv('HTTP_BAE_ENV_AK'),
            getenv('HTTP_BAE_ENV_SK'),
            MYSQLNAME,
            getenv('HTTP_BAE_ENV_ADDR_SQL_PORT')
        );
        if ($this->mysqli->connect_errno) die($this->mysqli->connect_error);
        $this->mysqli->query("SET NAMES utf8");
    }
    // DQL 查詢
    public function execute_dql($sql) {
        return $this->mysqli->query($sql) or die($this->mysqli->error);
    }
    // DML 增刪改
    public function execute_dml($sql) {
        $res = $this->mysqli->query($sql) or die($this->mysqli->error);
        if (!$res) return 0;
        return $this->mysqli->affected_rows > 0 ? 1 : 2;
    }
}

使用:

$db = new MySQLi_BAE();
$res = $db->execute_dml("INSERT INTO test_mysql(...) VALUES(...)");
$stmt = $db->execute_dql("SELECT * FROM test_mysql WHERE from_user='$fromUsername'");
$row = $stmt->fetch_assoc();

六、 安全與最佳實踐補充

  • SQL 注入防護:上述示例為教學簡化,實際必須使用預處理語句(mysqli_prepare/PDO::prepare)
  • 密碼加密:存儲 password_hash() 雜湊值,驗證用 password_verify()
  • 錯誤處理:生產環境關閉錯誤顯示,記錄 error_log
  • 連接復用:BAE 環境建議使用持久連接或連接池

七、 總結

本文完整演示了 BAE 雲平台上 MySQL 數據庫的創建、PHP 連接封裝(mysql/mysqli 兩種風格)、CRUD 操作封裝、微信公眾號文本指令解析與業務邏輯實現。核心遷移路徑:mysql 過程風格 → mysqli OO 封裝 → PDO 統一抽象 → 預處理防注入 → 密碼雜湊存儲。建議新項目直接採用 PDO + 預處理 + 異常模式,老項目逐步重構。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved