본문 바로가기
PHP

[PHP] DB에서 특정 행들만 가져오기(6) - 쿼리 작성하기 mysqli_query()

by LightBlogger 2017. 9. 17.

PHP 에서 쿼리를 DB에 질의하는 함수는 mysqli_query() 가 담당한다.


DB에 접속해야 하므로 함수 안에는 접속 정보(이전에 $conn 에 저장해 두었던)와 쿼리, 두 가지를 입력해야 한다.


일단 mysqli_query() 에 $conn 과 함께 SELECT * FROM user_data 를 쿼리로 입력해 보자.



<?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

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

$result = mysqli_query($conn, "SELECT * FROM user_data");

$i = 0;
while($i<count($list)){
  $log = $list[$i];
  $log = rtrim($log, "\r\n");
  echo sprintf("SELECT * FROM user_data WHERE log_num='%d'", $log);
  echo "</br>";
  $i = $i + 1;
}

 ?>
  </body>
</html>



mysqli_query() 함수에 쿼리를 입력하고, 결과를 $result 변수에 담았다. 말하자면 $result 안에 user_data 테이블이 담긴 셈.


하지만 이것을 바로 출력할 수는 없고, 한 행씩 배열로 불러와야 출력할 수 있다. 이를 위해 사용하는 함수가 mysqli_fetch_row() 다.


이전에 작업한 sprintf() 는 잠시 주석 // 처리하고 mysqli_fetch_row() 를 적어보자. 출력을 위해 echo도 적자.



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

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

$result = mysqli_query($conn, "SELECT * FROM user_data");
$row = mysqli_fetch_row($result);
echo $row[0];

$i = 0;
while($i<count($list)){
  $log = $list[$i];
  $log = rtrim($log, "\r\n");
  // echo sprintf("SELECT * FROM user_data WHERE log_num='%d'", $log);
  echo "</br>";
  $i = $i + 1;
}

 ?>
  </body>
</html>



결과는 다음과 같다.



1? 1이 뭘까?


1행 1열의 값, 즉 log_num 의 첫 번째 값이 되겠다.



프로세스는 이렇다.


mysqli_fetch_row() 함수에 의해 $result 에 있는 user_data 테이블 중 1행의 정보가 $row에 배열의 형태로 담긴다.


echo $row[0] 은 그 배열(1행의 요소들이 배열의 형태로 $row에 담겼다)의 1번째 요소 를 출력한다.



같은 코드를 세 번 반복해 보자.


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

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

$result = mysqli_query($conn, "SELECT * FROM user_data");
$row = mysqli_fetch_row($result);
echo $row[0];
$row = mysqli_fetch_row($result);
echo $row[0];
$row = mysqli_fetch_row($result);
echo $row[0];

$i = 0;
while($i<count($list)){
  $log = $list[$i];
  $log = rtrim($log, "\r\n");
  // echo sprintf("SELECT * FROM user_data WHERE log_num='%d'", $log);
  echo "</br>";
  $i = $i + 1;
}

 ?>
  </body>
</html>


결과는 다음과 같다.




mysqli_fetch_array() 는 처음 실행시 테이블의 1행을, 두 번째 실행시 테이블의 2행을 자동으로 가져온다.


1행을 가져와 1번째 요소를 반환하고


2행을 가져와 1번째 요소를 반환하고


3행을 가져와 1번째 요소를 반환한 것이 출력되고 있다.


그러므로 이 코드를 기존 while() 안에 넣으면 이렇게 되겠다.


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

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

$result = mysqli_query($conn, "SELECT * FROM user_data");

$i = 0;
while($i<count($list)){
  $log = $list[$i];
  $log = rtrim($log, "\r\n");

  $row = mysqli_fetch_row($result);
  echo $row[0];

  // echo sprintf("SELECT * FROM user_data WHERE log_num='%d'", $log);
  echo "</br>";
  $i = $i + 1;
}

 ?>
  </body>
</html>


결과는 다음과 같다.



i 는 0 부터 19 까지 증가하며 20번 반복했고, 그때마다 행을 가져와 첫 번째 요소를 출력했다.


우리는 첫 번째 요소뿐 아니라 모든 요소를 다 출력해야 하므로, 이렇게 적자.


echo $row[0], $row[1], $row[2], $row[3];


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

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

$result = mysqli_query($conn, "SELECT * FROM user_data");

$i = 0;
while($i<count($list)){
  $log = $list[$i];
  $log = rtrim($log, "\r\n");

  $row = mysqli_fetch_row($result);
  echo $row[0], $row[1], $row[2], $row[3];

  // echo sprintf("SELECT * FROM user_data WHERE log_num='%d'", $log);
  echo "</br>";
  $i = $i + 1;
}

 ?>
  </body>
</html>


결과는 다음과 같다.



중간에 어떠한 구분자도 넣어주지 않아 열이 서로 붙었지만,


4열까지 모든 정보를 출력하고 있다.


일단 구분이 어려우니 아쉬운대로 | 를 넣어주자. 다음 포스트에서 표 모양으로 만들 것이다.


echo $row[0]," | ",$row[1]," | ",$row[2]," | ",$row[3];



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

<?php

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

$result = mysqli_query($conn, "SELECT * FROM user_data");

$i = 0;
while($i<count($list)){
  $log = $list[$i];
  $log = rtrim($log, "\r\n");

  $row = mysqli_fetch_row($result);
  echo $row[0]," | ",$row[1]," | ",$row[2]," | ",$row[3];

  // echo sprintf("SELECT * FROM user_data WHERE log_num='%d'", $log);
  echo "</br>";
  $i = $i + 1;
}

 ?>


  </body>
</html>


결과는 다음과 같다.



만들어둔 쿼리를 빨리 질문하고 싶은데, 테이블을 가져와 원하는 모양으로 출력하는 것이 만만치 않다.


다음 포스트에서 테이블을 표 모양으로 출력하는 것에 대해 이어서 알아보자.




반응형

댓글