위 챗 공중 플랫폼 개발 데이터베이스 조작

프로필
앞에서 설명 한 기능 개발 은 모두 API 를 간단하게 호출 하여 이 루어 졌 으 며 데이터 베 이 스 를 조작 하지 않 았 다.다음 고급 기능 개발 에 있어 데이터 베 이 스 를 사용 해 야 하기 때문에 이 편 에서 MySQL 데이터 뱅 크 의 조작 에 대해 간단 한 소 개 를 하여 독자 들 이 참고 할 수 있 도록 하 겠 습 니 다.
2.사고 분석
바 이 두 개발 자 센터 는 강력 한 클 라 우 드 데이터 베이스(MySQL,MongoDB,Redis 포함)를 제공 합 니 다.이 튜 토리 얼 에서 저 희 는 여러분 이 비교적 잘 아 는 MySQL 데이터 베 이 스 를 조작 시연 하여 위 챗 과 데이터 베이스 의 상호작용 을 실현 할 것 입 니 다.
BAE 응용 프로그램 에서 클 라 우 드 데이터 베 이 스 를 사용 하 는 것 은 매우 간단 합 니 다.데이터베이스 목록 의 이름 은 데이터 베 이 스 를 연결 할 때의 dbname 입 니 다.사용자 이름,비밀번호,연결 주소 와 포트 는 응용 프로그램 에서 환경 변 수 를 통 해 추출 합 니 다.
표준 PHP Mysql 또는 PHP Mysqli 확장 을 사용 하여 데이터 베 이 스 를 방문 할 수 있 습 니 다.BAE 의 PHP 에 서 는 이 두 개의 확장 을 제공 합 니 다.응용 프로그램 은 직접 사용 할 수 있 습 니 다.
3.BAE MySQL 데이터베이스 만 들 기
3.1 바 이 두 개발 자 센터 에 로그 인->관리 센터->응용 프로그램 선택->클 라 우 드 환경->서비스 관리->MySQL(클 라 우 드 데이터베이스)->데이터베이스 만 들 기

3.2 데이터베이스 만 들 기

주의:모든 응용 프로그램 이 있 고 하나의 데이터 베이스 만 1G 무료 할당량 을 누 릴 수 있 으 며 나머지 데이터 베 이 스 는 무료 할당량 혜택 을 받 지 않 습 니 다.무료 할당량 을 사용 한 데이터 베 이 스 를 삭제 해 야 이 혜택 을 다시 사용 할 수 있 습 니 다.
3.3 창설 성공
데이터베이스 이름,즉 dbname 을 볼 수 있 습 니 다.나중에 사용 할 수 있 습 니 다.
"phpMyadmin"을 누 르 면 데이터 베 이 스 를 방문 합 니 다.

3.4 phpMyadmin 인터페이스
새 데이터 시트,표 이름과 필드 수 를 입력 하고'실행'을 누 르 면 표를 만 듭 니 다.

3.5 생 성 표
필드 이름과 필드 형식 을 입력 하고 입력 이 완료 되면 아래 의'저장'을 클릭 하여 표 의 생 성 을 완료 합 니 다.

3.6 창설 완료
id 필드 를 주 키 로 수정 하고 AUTO 추가INCREMENT;수정 fromuser 필드 는 유일(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 조작

데이터베이스 와 데이터 시트 의 생 성 은 여기 서 끝 납 니 다.다음은 데이터베이스 와 데이터 시트 의 사용 에 대해 상세 한 설명 을 할 것 입 니 다.
4.공식 예제(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<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
";
  }
   
  //    
  $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");
 
?-->
테스트 사용:

실행 성공. 
5.호출 가능 한 함수 형식 으로 수정(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 "     ";
}
이상 함수 와 데이터 베 이 스 를 연결 하 는 코드 를 결합 하여 my sql 생 성bae.func.php 파일 은 아래 테스트 에 사용 할 수 있 습 니 다.
6.테스트 MySQL 함수 사용
6.1 새 파일 devmysql.php 같은 디 렉 터 리 에 mysql 도입bae.func.php 파일
require_once './mysql_bae.func.php';
6.2 테스트 생 성 표
phpMyAdmin 을 사용 하여 만 든 testmy sql 표 삭제,테스트 문 구 는 다음 과 같 습 니 다.

//   
$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 테스트 삭제 표
테스트 문 구 는 다음 과 같다.
//표 삭제$dropsql = "drop table if exists test_mysql";
echo _drop_table($drop_sql);
테스트 결과:

MySQL 함수 테스트 가 모두 성공 하 였 습 니 다.
7.위 챗 과 의 상호작용 실현(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 = "      ";
  }
}
테스트 결과:

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]
"." :$rows[password]
"."From_user:$rows[from_user]
"." :$rows[update_time]"; }else{ $contentStr=" , , , !"; } }
테스트 결과:

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 = "     ,      ";
  }
}
테스트 결과:

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 = "    ";
  }
}
테스트 결과:

위 챗 과 의 대화 테스트 성공.
8.PHP Mysqli 확장,클래스 로 패키지
Mysqli 확장 을 클래스 로 봉 하여 사용 합 니 다.코드 는 다음 과 같 습 니 다.

<!--?php
 
require_once 'includes/configure.php';
 
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.테스트 류 의 사용
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('David','860510', 'abcabc', '2013-09-27 17:14:28')";
 
//$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 "      ";
}
?>
테스트 결과:

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 '
';
}
 
$res->free();
?>
테스트 결과:

10.위 챗 과 의 상호작용 실현(Mysqli 확장)
10.1 선행 조작
A.MySQLi 도입BAE.class.php 파일
//데이터베이스 함수 파일 도입 requireonce "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);
테스트 결과:

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);
테스트 결과:

10.4 테스트 업데이트 작업
테스트 코드:
$update_sql="UPDATE test_mysql SET password='$new_password' WHERE from_user='$fromUsername'";
$res = $this->mysqli_BAE->execute_dml($update_sql);
테스트 결과:

10.5 테스트 삭제 작업
테스트 코드:
$delete_sql="DELETE FROM test_mysql WHERE from_user='$fromUsername'";
$res = $this->mysqli_BAE->execute_dml($delete_sql);
테스트 결과:

위 챗 과 의 대화 테스트 성공. 
11.전체 코드 획득
방문 해 주세요. 즐기다 공식 포럼
URL:http://pan.baidu.com/s/1c0s3Jby
관심
주목 해 주세요. 장쑤 성 위 챗 공식 계 정,탁 금 소주 BAE 플랫폼 개발 을 바탕 으로 주류 의 위 챗 기능 에 대한 개발 테스트 를 실시한다.
주목 하 셔 도 됩 니 다. 장쑤 성 공공 계 정 은 기능 테스트 를 하고 새로운 응용 개발 을 얻 습 니 다.
1.위 챗 클 라 이언 트 로그 인,주소록->친구 추가->공중 번호 찾기-> zhuojinsz,찾 고 주목 합 니 다.
2.QR 코드 스 캔:

장쑤 성 기능 목록:

 읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기