본문 바로가기
PHP

[PHP] DB에서 특정 행들만 가져오기(3) - 목록 읽어오기 file()

by LightBlogger 2017. 9. 12.

우리의 기본전략은 다음 SQL의 □ 안을 바꾸어 가며 SQL을 돌리는 것이다.


SELECT * FROM user_data WHERE log_num=□


□ 안에 들어가야 할 것은 1, 9, 23, 109, 125, 264, 359, 416, 484, 504, 545, 620, 636, 640, 643, 669, 689, 720, 725, 749 의 20가지 숫자다.


먼저 이 숫자들의 목록을 별도 파일로 만들어 두고, PHP 에서 그 파일을 읽어오도록 해 보자.



2017/09/08 - [SQL] - [SQL] DB에서 특정 행들만 가져오기(1) - "or"를 이용에서 나온대로 


엑셀에서 이 목록을 세로로 배열한 후 메모장에 붙여넣어 TXT 파일을 만든다.



파일을 저장할 위치는 이전과 같다. (Bitnami 기준이며 폴더명 중간에 숫자는 다소 다를 수 있다)


C:\Bitnami\wampstack-5.6.31-0\apache2\htdocs


localhost 의 apache 서버 안에 넣어 두면 되겠다. 별도로 하위 폴더를 만들어 작업해도 된다.



이제 다시 PHP로 돌아가 보자. HTML 템플릿의 <BODY> 부분에 다음과 같이 PHP 작성을 위한 공간을 새로 만든다.


<?php $conn = mysqli_connect("localhost", "root", "123456789"); mysqli_select_db($conn, "test");  ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <?php  ?> </body> </html>


저장한 TXT 파일을 PHP에서 불러와 보자. file() 함수를 사용한다.


여기서는 list.txt 로 파일을 저장하였다.


$list = file("list.txt");


(가장 위의 접속정보는 가독성을 위해 생략 ㅡ 실제로는 적어 주어야 한다.)


<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <?php $list = file("list.txt");  ?> </body> </html>


file("list.txt")의 결과를 $list 변수에 넣어 주었다. 


file() 함수는 list.txt 를 한 행씩 읽어와 배열로 만들어 $list 에 저장해 둘 것이다.


저장된 배열에서 요소를 호출하려면 변수에 대괄호를 붙여 다음과 같이 적으면 된다.


echo $list[0];


<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
<?php

$list = file("list.txt");
echo $list[0];

 ?>
  </body>
</html>


$list 의 [0] 번째 요소를 출력(echo)하라는 명령이다.


내친김에 실행해 보자. PHP 는 아까의 폴더에 test.php 로 저장해 두었다.


브라우저의 주소창에 다음과 같이 입력하면 우리가 만든 파일을 호출할 수 있다.


http://localhost/test.php



1? 1이 뭘까?


아까 list.txt 에 넣은 요소들 중 첫 번째 요소다.


첫 번째 요소가 [0] 이 된다. 두 번째 요소는 [1]일 것이다. 호출해 보자.


echo $list[1];


<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
<?php

$list = file("list.txt");
echo $list[1];

 ?>
  </body>
</html>



두 번째 요소인 9가 호출되었다.


이제 SQL의 □ 안에 담을 요소는 준비된 셈이다.


마지막으로 한 가지 처리가 더 필요하다. 다음과 같이 입력해 보자.


echo $list[1],$list[2],$list[3];


<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <?php $list = file("list.txt"); echo $list[1],$list[2],$list[3];  ?> </body> </html>


출력 결과는 다음과 같다.



배열이 자료를 읽을 때 자동으로 뒤에 공백을 넣어 주고 있는 것이 보인다.


이렇게 출력할 때는 편하지만, 실제 SQL에 넣을 때는 다음과 공백을 포함하여 적는 셈이 되어 제대로 조회가 되지 않을 가능성이 있다.


SELECT * FROM user_data WHERE log_num='9 '


9 뒤에 공백이 들어 있는 것이 보인다. 


그러니 공백 제거의 과정을 거쳐야겠다. 다음과 같이 rtrim() 함수를 사용한다.


$id = rtrim($id, "\r\n");


<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
<?php

$list = file("list.txt");
$id = $list[0];
$id = rtrim($id, "\r\n");

 ?>
  </body>
</html>


$list 의 [0]번째 (첫번째) 값을 $id 에 넣고, 공백을 제거해 주었다. 


실제로 이렇게 사용할 것은 아니지만, 개념은 동일하다. 다음 포스트에서 이어가 보자.





반응형

댓글