728x90

목차

  1. PHP를 MySQL과 연동하는 3가지 API_mysql/mysqli/PDO
  2. mysqli API
  3. PHP MySQL 연동, 출력 예시

[바로가기] php기본


1. PHP를 MySQL과 연동하는 3가지 API

[목차로 이동]

 

mysql API 가장 오래된 API로 사용을 권장하지 않음
mysqli(mysql improved) API 함수를 사용해서 데이터베이스를 제어할 수 있으며 mysql을 개선한 API
PDO(PHP Data Object) API 여러 데이터베이스에 공통된 API를 제공하기 때문에 데이터베이스가 바뀔 경우도 호환됨

2. mysqli API

[목차로 이동]

 

mysqli_connect
("localhost", "user", "PW", "database")
MySQL 서버에 연결해 주는 함수 $link mysqli_connect
("127.0.0.1""root""my_password""my_db");
mysqli_query($link, $query) mysqli_connect로 연결된 서버에 쿼리문을 실행 시키는 함수로 true/false를 반환 $query =
"CREATE TEMPORARY TABLE myCity LIKE City";

if (
mysqli_query($link, $query) === TRUE) {
printf("Table myCity successfully created."
);
}
mysqli_error($link) 쿼리에 에러가 있다면 String타입으로 반환

* 에러가 뜬다면 브라우저 창에 띄우면 보안 공격에 힌트가 될 수 있다.
따라서 반드시 에러는 클라이언트가 알 수 없도록 파일로 기록하는 것을 강력히 권장 
$result = mysqli_query($link, $sql);

if ( $result === false
) {
printf("Error message: %s \n",
mysqli_error($link)
);
}
mysqli_connect_errno( )  MySQL 서버 접속에 에러가 있다면
INT타입의 에러 코드를 반환
* 0 은 오류가 없음
if ( !$link ) {
die(
'Connect Error: '.mysqli_connect_errno()
);
} //Connect Error : 1045
mysqli_fetch_array($result) mysqli_query를 통해 얻은 결과값을 한개씩 반환해 주는 함수로 일반배열과 연관배열의 형태로 반환

일반배열: '배열의 순서'를 key로
연관배열: 데이터베이스의 '컬럼명'을 key로
$link =mysqli_connect
('localhost', 'root', 'PW', 'database');
$sql = "SELECT * FROM table";
$result = mysqli_query($link, $sql);

while ($row = mysqli_fetch_array($result)) {
echo '<h1>'.$row['title'].'</h1>';
echo $row['description'];
}
mysqli_real_escape_string
($link, $escapeString)
SQL쿼리문에서 사용되는 문자열에서 특수 문자를 회피해 SQL인젝션을 방어할 수 있는 API.
MySQL과 연결하는 변수와 escape형태로 만들어 줄 변수를 입력한다 
$article = array(
'title' => 'title',
'description' => 'description'
);

if(isset($_GET['id'])) {
$filtered=
mysqli_real_escape_string($link, $_GET['id']);

$sql = "SELECT * FROM table
WHERE id={$filtered}";
$result = mysqli_query($link, $sql);
$row = mysqli_fetch_array($result);

$article['title'] = $row['title'];
$article['description'] = $row['description'];
}

* mysqli_connect를 사용할 때 가끔 연결이 안될 떄가 있는데 이때는 127.0.0.1뒤에 포트번호를 붙혀주면 연결이 될 수도 있다.
ex)127.0.0.1:3306 (MySQL 서버는 기본적으로 3306번 포트를 사용한다)
* php는 False나 Null이 아니라면 True로 취급.
따라서, while ($row = mysqli_fetch_array($result)) { ... } 이 실행될 때 모든 행이 출력돼어 Null이 되면 while문 안에 조건이 True가 아니므로 while문이 끝남


3. php MySQL 연동, 출력 예시

[목차로 이동]

 

데이터베이스에 있는 테이블
데이터베이스 연동 및 출력 코드
브라우저 창에 출력된 결과

* $row = mysqli_fetch_array($result) 를 사용할 때마다 테이블의 행이 바뀐다는 것을 알 수 있다.
* while ($row = mysqli_fetch_array($result)) { ... } 을 사용한다면 행이 모두 출력된다면 Null 값을 갖고 이를 while문이 False로 처리하기 때문에 반복문이 끝난다.

<?php
$link = mysqli_connect('127.0.0.1:3306', 'root', 'password', 'schema_test');
$sql = "SELECT * FROM test1";
$result = mysqli_query($link, $sql);
?>

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <body>
    <!--일반배열-->
    <?php
    $row = mysqli_fetch_array($result);
    echo $row[1].'<br>';
    echo $row[2].'<br>';
    echo $row[3].'<br>';
    ?> <hr>
    <!--연관배열-->
    <?php
    $row = mysqli_fetch_array($result);
    echo $row['name'].'<br>';
    echo $row['phoneNumber'].'<br>';
    echo $row['joinDate'].'<br>';
    ?> <hr>
    <!--반복문-->
    <?php
    while ($row = mysqli_fetch_array($result)) {
      echo $row['name'].'<br>';
      echo $row['phoneNumber'].'<br>';
      echo $row['joinDate'].'<br>';
    }
    ?> <hr>
  </body>
</html>

728x90

+ Recent posts