이 글을 읽기 전에 다음 2개의 글을 읽어주세요.

"안드로이드 DB CRUD(쓰기, 읽기, 수정, 삭제) 1 - 프로세스" - http://ilbbang.tistory.com/34
"안드로이드 DB CRUD(쓰기, 읽기, 수정, 삭제) 2 - MariaDB 설정하기" - http://ilbbang.tistory.com/45

제가 따라해 볼 원문을 다시 확인해 보겠습니다.(출처)
http://freeprojectcode.com/android/android-mysql-basic-crud-operation-tutorial-for-android-studio-project/

이전단계에서 MariaDB 설정을 완료했으면 다음 단계는 PHP 서버 프로그래밍으로 쿼리문을 실행할 수 있게 하겠습니다. 안드로이드에서는 서비스DB에 직접 접근할 수 없습니다. 이전에는 Mysql에서 제공하는 dbconnector를 import 해서 접근이 가능했지만 이 기능은 더이상 사용이 불가능하다고 합니다. 그래서 중간에 PHP 또는 Node.js 와 같은 서버 프로그래밍을 활용하여 간접적으로 DB에 접근이 가능합니다. Node.js가 더 신기술이긴 소규모 서비스를 위한 비용을 고려했을 때 PHP가 더 저렴하다고 판단하였기 때문에 PHP를 선택하였습니다.

저는 cafe24 사이드를 사용중입니다. node.js가 더 저렴한 곳이 있다면 댓글 남겨주세요.

이번 단계에서 만들 php 파일은 총 6개 입니다. (테스트용 파일 제외)

파일1. db_config.php
파일2. addEmp.php
파일3. getEmp.php
파일4. getAllEmp.php
파일5. updateEmp.php
파일6. deleteEmp.php

파일 별 설명 및 코드를 살펴보겠습니다.

파일1은 Maria DB를 접속하기 위한 파일입니다. 이 파일이 없다면 나머지 파일에 동일하게 접속할 수 있는 코드를 만들면 되지만, 이 경우 정보가 변경되었을 때 번거롭기 때문에 하나의 파일로 관리합니다.

파일1. db_config.php
<?php

 //DB 정보를 입력합니다
 define('HOST','IP또는HOSTNAME:PORT(생략시3306)');
 define('USER','사용자ID');
 define('PASS','암호');
 define('DB','DB이름');
 
 //DB에 접속합니다.
 $con = mysqli_connect(HOST,USER,PASS,DB) or die('DB에 연결할 수 없습니다.');
?>
이 파일을 다른 파일에서 require_once 명령어로 불러오면 $con 변수에 접속 스크립트가 실행되여 DB에 접속이 가능합니다. 접속이 안 될 경우에는 'DB에 연결할 수 없습니다.' 문구를 출력하고 접속이 되지 않습니다.

파일2는 DB에 자료를 입력하기 위한 파일입니다. 이름(name), 직함(designation), 급여(salary) 정보를 post 방식으로 보내면 이 파일에서 쿼리문을 실행해 DB에 입력합니다.

파일2. addEmp.php
<?php 
        // POST 방식일 경우에만 코드가 실행됩니다.
	if($_SERVER['REQUEST_METHOD']=='POST'){
		
		//POST로 보낸 값을 받아서 변수에 입력합니다.
		$name = $_POST['name'];
		$desg = $_POST['designation'];
		$sal = $_POST['salary'];
		
		//받아온 값을 입력 값으로 지정한 INSERT 쿼리문을 작성합니다.
		$sql = "INSERT INTO employee (name, designation, salary) VALUES ('$name','$desg','$sal')";
		
		//DB 접속 스크립트를 불러옵니다.
		require_once('db_config.php');
		
		//쿼리문을 실행합니다.
		if(mysqli_query($con,$sql)){

// 입력 성공 시 아래 내용을 출력합니다. echo '종업원 정보가 성공적으로 입력되었습니다.';

}else{

// 입력 실패 시 아래 내용을 출력합니다. echo '종업원 정보를 입력할 수 없습니다.'; } //접속을 종료합니다. mysqli_close($con); }else{

// POST 방식이 아니면 아래 내용을 출력합니다. echo 'Post Request 가 아닙니다.'; } ?>

파일3과 파일4는 DB의 자료를 읽어오기 위한 파일입니다. 읽어온 자료를 json 형식으로 변환해서 화면에 출력해 줍니다.
파일3은 단일 레코드의 정보를 가져옵니다. 검색 조건은 id 입니다. 파일4는 모든 레코드의 정보를 가져옵니다.

파일3. getEmp.php

<?php 
	
	//POST로 보낸 id 값을 받아서 변수에 입력합니다.
	$id = $_POST['id'];
	
	//DB 접속 스크립트를 불러옵니다.
	require_once('db_config.php');
	
	//받아온 id를 검색 조건으로 특정 종업원의 정보를 불러오는 쿼리문을 작성합니다.
	$sql = "SELECT * FROM employee WHERE id=$id";
	
	//쿼리문을 실행합니다. 결과를 r 변수에 저장합니다.
	$r = mysqli_query($con,$sql);
	
	// r 변수의 내용을 array 형식으로 내보내 result 변수에 저장합니다.
	$result = array();
	$row = mysqli_fetch_array($r);
	array_push($result,array(
			"id"=>$row['id'],
			"name"=>$row['name'],
			"desg"=>$row['designation'],
			"salary"=>$row['salary']
		));

	//저장된 result 변수를 json 형식으로 출력합니다.
	echo json_encode(array('result'=>$result), JSON_PRETTY_PRINT+JSON_UNESCAPED_UNICODE);
	

//접속을 종료합니다. mysqli_close($con); ?>

파일4. getAllEmp.php

<?php 
	//DB 접속 스크립트를 불러옵니다.
	require_once('db_config.php');
	
	//전체 종업원의 정보를 불러오는 쿼리문을 작성합니다.
	$sql = "SELECT * FROM employee";
	
	//쿼리문을 실행합니다. 결과를 r 변수에 저장합니다.
	$r = mysqli_query($con,$sql);
	
	// result 변수의 유형을 array 로 정의합니다.
	$result = array();
	
	// 모든 레코드에 대하여 while 문으로 반복 처리를 수행합니다.
	while($row = mysqli_fetch_array($r)){
		
		// r 변수의 내용을 array 형식으로 내보내 result 변수에 저장합니다.
		array_push($result,array(
			"id"=>$row['id'],
			"name"=>$row['name'],
                        "designation"=>$row['designation'],
                        "salary"=>$row['salary']
		));
	}
	
	//저장된 result 변수를 json 형식으로 출력합니다.
	echo json_encode(array('result'=>$result), JSON_PRETTY_PRINT+JSON_UNESCAPED_UNICODE);
	

//접속을 종료합니다. mysqli_close($con); ?>

파일5는 DB의 자료를 수정하기 위한 파일입니다. 검색 조건은 id 입니다. id, 이름(name), 직함(designation), 급여(salary) 정보를 post 방식으로 보내면 이 파일에서 쿼리문을 실행해 자료를 수정합니다.

파일5. updateEmp.php

<?php 
	if($_SERVER['REQUEST_METHOD']=='POST'){
		//POST로 보낸 값을 받아서 변수에 입력합니다.
		$id = $_POST['id'];
		$name = $_POST['name'];
		$desg = $_POST['designation'];
$sal = $_POST['salary']; //DB 접속 스크립트를 불러옵니다. require_once('db_config.php'); //특정 종업원의 정보를 수정하는 쿼리문을 작성합니다. $sql = "UPDATE employee SET name = '$name', designation = '$desg', salary = '$sal' WHERE id = $id;"; //Updating database table if(mysqli_query($con,$sql)){ // 수정 성공 시 아래 내용을 출력합니다. echo '종업원 정보가 성공적으로 수정되었습니다.'; }else{ // 수정 실패 시 아래 내용을 출력합니다. echo '종업원 정보를 수정할 수 없습니다.'; } //접속을 종료합니다. mysqli_close($con); } ?>

파일6은 DB의 자료를 삭제하기 위한 파일입니다. 검색조건은 id 입니다. id 정보를 post 파일로 보내면 이 파일에서 쿼리문을 실행해 해당 자료를 삭제합니다.

파일6. deleteEmp.php

<?php 
   // POST 방식일 경우에만 코드가 실행됩니다.
   if(isset($_POST['id'])){
	//POST로 보낸 id 값을 받아서 변수에 입력합니다.
	$id = $_POST['id'];
	
	//DB 접속 스크립트를 불러옵니다.
	require_once('db_config.php');
	
	//특정 종업원의 정보를 삭제하는 쿼리문을 작성합니다.
	$sql = "DELETE FROM employee WHERE id=$id;";
	
	//쿼리문을 실행합니다.
	if(mysqli_query($con,$sql)){
                // 삭제 성공 시 아래 내용을 출력합니다. 
		echo '종업원 정보가 성공적으로 삭제되었습니다.';
	}else{
                // 삭제 실패 시 아래 내용을 출력합니다. 
		echo '종업원 정보를 삭제할 수 없습니다.';
	}
	
	//접속을 종료합니다.
	mysqli_close($con);
   }else{
        // POST 방식이 아니면 아래 내용을 출력합니다.
        echo 'Post Request 가 아닙니다.';
   }
?>

예제 파일이어서 그대로 진행하지만 post 로 보낼때 변수 값을 더 지정한다면 파일을 여러개 만들 필요가 없다고 생각합니다.
시간이 되신다면 dbconfig.php, crudEmp.php 파일 두개로 진행할 수 있는 방법을 생각해 보세요.

이제 안드로이드에서 php 파일에 접속하여 MariaDB에 CRUD(쓰기, 읽기, 수정, 삭제)를 수행해 보겠습니다. 아래 링크를 클릭해 주세요

"안드로이드 DB CRUD(쓰기, 읽기, 수정, 삭제) 4 - Android 화면 및 구현하기" - http://ilbbang.tistory.com/52

감사합니다.

MySQL DB의 자료를 안드로이드 앱에서 사용하기 위해서는 중간에 php 또는 node.js 등의 서버 프로그래밍을 거쳐야 합니다.


그래서 이번에는 mysql DB 내용을 php를 활용하여 json 형식으로 가져오는 코딩을 해보겠습니다.


과정은 간단합니다. php 파일 하나만 만들면 되는데요.

php 코드는 다음과 같습니다.

<?php 
// DB 접속 
$con=mysqli_connect("DB접속도메인또는IP:포트(3306이아닌경우)","DB사용자ID","비밀번호","사용할DB"); 
// 접속 실패 시 메시지 나오게 하기 
if (mysqli_connect_errno($con)) 
{ echo "MySQL접속 실패: " . mysqli_connect_error(); } 

// 기본 클라이언트 문자 집합 설정하기 
mysqli_set_charset($con,"utf8"); 
// 쿼리문 실행, 결과를 res에 저장 
$res = mysqli_query($con, "select * from humaninfo"); 
// 결과를 배열로 변환하기 위한 변수 정의
$result = array(); 
// 쿼리문의 결과(res)를 배열형식으로 변환(result) 
while($row = mysqli_fetch_array($res)) 
{ array_push($result, array('name'=>$row[0],'yearmonthday'=>$row[1],'age'=>$row[2],'address'=>$row[3])); } 
// 배열형식의 결과를 json으로 변환 
echo json_encode(array("result"=>$result),JSON_UNESCAPED_UNICODE); 
// DB 접속 종료 
mysqli_close($con); 
?>

해당 파일을 서버에 올리고 실행하면 다음과 같이 결과가 출력됩니다.

{"result":[{"name":"강인한","yearmonthday":"19840831","age":"33","address":"서울시 강서구 화곡동"},{"name":"김길동","yearmonthday":"19920910","age":"25","address":"경기도 김포시 풍무동"}]}

이제 이 내용을 안드로이드에서 읽어오면 됩니다.

감사합니다.

Visual Studio Code 에서 PHP 프로그래밍 및 디버그를 해보겠습니다.


Visual Studio Code 홈페이지에서 PHP 프로그래밍을 하는 방법에 대하여 소개되어 있는 페이지가 있습니다. 아래 링크를 클릭해 주세요.

https://code.visualstudio.com/docs/languages/php


이 페이지대로만 하면 쉽게 할 수 있겠다고 생각하겠지만 그렇지 않습니다.


전제 조건으로 PHP가 컴퓨터에 설치되어 있어야 합니다.


1. http 서버 및 php 설치


    - http 서버는 apache를 사용해도 되고 윈도우에서 제공하는 iis를 중 원하는 서버를 설치 및 설정합니다.

    - php는 홈페이지에서 직접 다운로드 받아서 설치합니다. iis의 경우 "웹 플랫폼 설치 관리자"를 통해 php를 설치할 수도 있습니다.


2. PHP 확장프로그램 설치


    - 서버 설정 및 php 설치가 완료되었으면 visual studio code 확장 프로그램 중 PHP IntelliSense 와 PHP Debug 를 설치합니다.


3. php 실행파일 경로 설정


    - 설치가 완료되었으면 상단 메뉴 중 파일(F) - 기본 설정(P) - 설정(S) 로 들어가서 php 실행파일 경로를 지정합니다.


4. 디버깅


    - 디버깅을 위해서는 xdebug 를 설치해야 합니다. (저는 여기서 막혀서 좀 해맸습니다.)

    4-1, xdebug 설치 방법

        - 가장 쉽게 xdebug를 설치하는 방법은 xdebug install wizard 페이지(https://xdebug.org/wizard.php)에 phpinfo의 정보를 복사해서 붙여넣기 하면 설치 방법을 알려줍니다.

        4-1-1) xdebug 파일(dll 파일 1개)을 다운로드 받습니다.

        4-1-2) php설치폴더 하위에 있는 ext" 폴더에 다운로드 받은 dll 파일을 복사합니다.

        4-1-3) php설치폴더에 있는 php.ini 파일을 편집기로 열어서 xdebug 관련 설정 값을 추가합니다.


[XDebug]

zend_extension="xdebug dll 파일이 있는 경로"

xdebug.remote_enable = 1

xdebug.remote_autostart = 1


        4-1-4) 웹 서버를 재시작 합니다.

    

    - xdebug 설치가 완료된 후에 visual studio code 를 재시작합니다.

    - php 폴더를 추가하고 php 파일을 열고 F5 버튼을 클릭하면 디버그 언어를 선택하는 창이 나타납니다(java php 등)

    - php를 선택하면 xdebug를 활용하여 디버깅을 할 수 있습니다.


감사합니다.

+ Recent posts