json에대해 알아보고있는 중인데


[{"user_id":"1"},{"user_id":"2"},{"user_id":"3"},{"user_id":"4"}]


이런식의 jsonarray만 달랑 사용하지않고

주로


{

"result":[{"user_id":"2"},{"user_id":"23"},{"user_id":"23"},{"user_id":"23"}]

}


이런식의 jsonobject안에 jsonarray를 넣는식으로 많이 사용한다고 한다


그래서 기존의 jsonarray만 만들던 방식을 변경해서 위와같은

형식으로 만들어 보았다.


/////////////////////////////////////////////////////////////////


<?php 

header("Content-Type:text/html;charset=utf-8");

    include ('./db_info.php');



$connect = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);

mysqli_query($connect, "SET NAMES 'utf8'");

if(!$connect){

echo "Error: Unable to connect to MySQL." . PHP_EOL;

echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;

echo "Debugging error: " . mysqli_connect_error() . PHP_EOL;

exit();

}

mysqli_set_charset($connect, "utf8");

//mysqli_query($connect, "SET NAMES utf8");


if ($result = mysqli_query($connect,"SELECT * FROM TEST")){

$jsonarray = array();


while ($row = mysqli_fetch_object($result)) {

$obj = new stdClass();

$obj->user_id = $row->user_id;

$obj->test2 = $row->test2;

$obj->test3 = $row->test3;


$jsonarray[] = $obj;

unset($obj);

}


if(count($jsonarray) == 0){

$jsonobj["result"]="empty";

} else {

$jsonobj["result"]=$jsonarray;

}


} else {

$jsonobj["result"]="fail";

}


$encode = json_encode($jsonobj, JSON_UNESCAPED_UNICODE );

echo $encode;

mysqli_close($connect);

           

?>


///////////////////////////////
결과

{"result":[{"user_id":"23","test2":"하하","test3":"2016-04-12 00:00:00"},{"user_id":"123","test2":"히히","test3":"2016-04-05 00:00:00"},{"user_id":"1234","test2":"호호","test3":"2016-04-18 00:00:00"},{"user_id":"1235","test2":"크크","test3":"2016-04-24 00:00:00"}]}


'공부 > php' 카테고리의 다른 글

(php) json 한글 유니코드  (2) 2016.04.23
(php db연결) select 후 json 만들기  (1) 2016.04.23
(db연결) 레코드, 필드 개수 구하기  (0) 2016.04.23
(db연결) mysql_connect 연결 실패  (0) 2016.04.23

php에서 db에 연결하여 json형태로 데이터를 추출하여 

화면에 출력해보았는데


[{"user_id":"23","test2":"\ud558\ud558","test3":"2016-04-12 00:00:00"},{"user_id":"123","test2":"\ud788\ud788","test3":"2016-04-05 00:00:00"},{"user_id":"1234","test2":"\ud638\ud638","test3":"2016-04-18 00:00:00"},{"user_id":"1235","test2":"\ud06c\ud06c","test3":"2016-04-24 00:00:00"}]


이런식으로 한글부분에 \u 문자가 붙고 뒤에도 이상하게 나오는것을 확인하였다.


검색해보니

\u 는 유니코드 구분자라고 한다


받는쪽에서 디코드를 제대로 해주면 문제없이 한글데이터를 사용할 수 있다고 한다


잘못된 것이 아니니 그대로 진행하면 된다.


//////////////////////////////////////////////////////

4/27일 수정 


아무래도 저 유니코드 부분을 바꿔야 될 것 같아서 찾아본 결과

버전별로 많은 바꾸는 방법이 있었다.


함수를 이용해서 euc-kr을 utf-8로 일일이 바꾸는 방법,

유니코드를 한글로 보여주는 함수 등과 같은

여러가지 방법을 했는데 잘되지않았다


내가 아래 방식으로 디비연결을 하고 데이터를 가져와 json_encode를 이용해

json 오브젝트를 만들고있었는데


<?php 

header("Content-Type:text/html;charset=utf-8");

header("Content-Type:application/json");

    include ('./db_info.php');



$connect = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);

mysqli_query($connect, "SET NAMES 'utf8'");

if(!$connect){

echo "Error: Unable to connect to MySQL." . PHP_EOL;

echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;

echo "Debugging error: " . mysqli_connect_error() . PHP_EOL;

exit();

}

mysqli_set_charset($connect, "utf8");

//mysqli_query($connect, "SET NAMES utf8");


if ($result = mysqli_query($connect,"SELECT * FROM TEST2")){

$o = array();

while ($row = mysqli_fetch_object($result)) {


$t = new stdClass();

$t->user_id = $row->user_id;

$t->test2 = $row->test2;

$t->test3 = $row->test3;

$o[] = $t;

unset($t);

}

} else {

$o = array( 0 => 'empty');

}


$encode = json_encode($o);

echo $encode;

mysqli_close($connect);

           

?>



하여 encode를 출력하면 계속 한글부분이 유니코드로 

[{"user_id":"1","test2":"\ud558\ud558\ud558","test3":"2016-03-28"},{"user_id":"2","test2":"\ud638\ud638\ud638","test3":"2016-04-05"},{"user_id":"3","test2":"\ud788\ud788\ud788","test3":"2016-04-11"},{"user_id":"4","test2":"\ud14c\uc2b7\ud750\uc785\ub2c8\ub2e4","test3":null}]

이런식으로 나오는데 여러가지 해결방법을 시도해 보았지만 되지않았다.

///////////////////////////////////

그런데


echo json_encode($o, JSON_UNESCAPED_UNICODE)

위방법으로 하니

[{"user_id":"1","test2":"�섑븯��","test3":"2016-03-28"},{"user_id":"2","test2":"�명샇��","test3":"2016-04-05"},{"user_id":"3","test2":"�덊엳��","test3":"2016-04-11"},{"user_id":"4","test2":"�뚯듂�먯엯�덈떎","test3":null}]

이런식으로 나와 더 미궁에 빠졌는데


알고보니

header("Content-Type:application/json");   

json 헤더 선언부분, 이부분이 뭔가 이상한거 같아 지워서 출력해보니 


[{"user_id":"1","test2":"하하하","test3":"2016-03-28"},{"user_id":"2","test2":"호호호","test3":"2016-04-05"},{"user_id":"3","test2":"히히히","test3":"2016-04-11"},{"user_id":"4","test2":"테슷흐입니다","test3":null}]


이런식으로 제대로 나오기 시작했다.

해결을 하기는 했지만 원인은 아직 잘 모르겠다.


db연결 후 select한 값을 json형태로 추출하고 싶다면

아래와 같이 하면 된다


db에 user_id, test2, test3이라는 컬럼이 있다고 가정하에..


사용버전 = 

PHP Version 5.5.9-1ubuntu4.14


//////////////////////////////////////////////////////////

db_info.php


<?php

define('DB_HOST', 'ip입력');

define('DB_USER', 'root');

define('DB_PASSWORD', '비밀번호입력');

define('DB_NAME', 'db이름 입력');

?>


//////////////////////////////////////////////////////////

test.php


<?php

 header("Content-Type:text/html;charset=utf-8");

header("Content-Type:application/json");

  include ('./db_info.php');


$connect = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);


if(!$connect){

echo "Error: Unable to connect to MySQL." . PHP_EOL;

echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;

echo "Debugging error: " . mysqli_connect_error() . PHP_EOL;

exit();

}

mysqli_set_charset($connect, "utf8");

//mysqli_query($connect, "SET NAMES 'utf8'");


if ($result = mysqli_query($connect,"SELECT * FROM TEST")){

$o = array();

while ($row = mysqli_fetch_object($result)) {


$t = new stdClass();

$t->user_id = $row->user_id;

$t->test2 = $row->test2;

$t->test3 = $row->test3;

$o[] = $t;

unset($t);

}

} else {

$o = array( 0 => 'empty');

}

echo json_encode($o);

  echo json_encode($o, JSON_UNESCAPED_UNICODE);


mysqli_close($connect);

           

?>



//4월 27일 수정


한글이 유니코드로 출력되어 코드 수정


header("Content-Type:text/html;charset=utf-8"); 추가

header("Content-Type:application/json"); 삭제

echo json_encode($o); 수정






'공부 > php' 카테고리의 다른 글

(json) jsonobject 안에 jsonarray  (0) 2016.04.28
(php) json 한글 유니코드  (2) 2016.04.23
(db연결) 레코드, 필드 개수 구하기  (0) 2016.04.23
(db연결) mysql_connect 연결 실패  (0) 2016.04.23

<?php

include ('./db_info.php');


$connect = mysqli_connect(DB_HOST,DB_USER,DB_PASSWORD);


$connect = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);


if(!$connect){

echo "Error: Unable to connect to MySQL." . PHP_EOL;

echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;

echo "Debugging error: " . mysqli_connect_error() . PHP_EOL;

exit();

}


if ($result = mysqli_query($connect,"SELECT * FROM TEST")){


$total_record = mysqli_num_rows($result); //레코드 개수

$total_fields = mysqli_num_fields($result); //필드 개수

}

?>



'공부 > php' 카테고리의 다른 글

(json) jsonobject 안에 jsonarray  (0) 2016.04.28
(php) json 한글 유니코드  (2) 2016.04.23
(php db연결) select 후 json 만들기  (1) 2016.04.23
(db연결) mysql_connect 연결 실패  (0) 2016.04.23

$connect = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);


if(!$connect){

echo "Error: Unable to connect to MySQL." . PHP_EOL;

echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;

echo "Debugging error: " . mysqli_connect_error() . PHP_EOL;

exit();

}


php에서 이런식으로 db연결을 시도 하고있는데 

연결 실패했다.


Host 'ip' is not allowed to connect to this MySQL server


이런 에러내용을 출력했는데

검색해보니 로컬호스트로는 접근가능한데 ip로 접근하려면

해당 ip에 권한을 줘야 접근할수 있다고 한다.


터미널에서 mysql -u root -p 해서 들어가서 접근할때는 잘됬는데

php에서 mysqli_connect 했을 때 접근이 안된다면 권한설정을 확인해야 한다


///////////////////////////////////////////


터미널에서 mysql -u root -p 를 이용해 접속한 후


mysql> use mysql

mysql>SELECT Host, User, Select_priv, Insert_priv,Update_priv, Delete_priv FROM user;


이렇게 입력하면 현재 권한 설정 정보를 볼수 있는데

이곳에 해당 ip가 빠져있다면 접근 불가능 한 것이다


ip접근 권한을 추가하려면


mysql> GRANT ALL PRIVILEGES ON *.* TO root@[ip주소] IDENTIFIED BY ['비밀번호'] WITH GRANT OPTION;

ex) GRANT ALL PRIVILEGES ON *.* TO root@12.34.56.77 IDENTIFIED BY '12345' WITH GRANT OPTION;


이렇게 해주면 된다


모든 ip를 추가하려면

GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY '12345' WITH GRANT OPTION;

이렇게 ip 대신 "%" 를 입력해 주면 된다

'공부 > php' 카테고리의 다른 글

(json) jsonobject 안에 jsonarray  (0) 2016.04.28
(php) json 한글 유니코드  (2) 2016.04.23
(php db연결) select 후 json 만들기  (1) 2016.04.23
(db연결) 레코드, 필드 개수 구하기  (0) 2016.04.23

+ Recent posts