728x90
목차
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
'# WEB > PHP' 카테고리의 다른 글
[PHP] 테이블 행마다 색을 자동으로 바꾸는 코드_for/if (0) | 2021.01.02 |
---|---|
[PHP] PHP와 MySQL로 구현한 CRUD (2) | 2021.01.02 |
[PHP] PHP 세부설정_에러표시/수정사항/타임존/포트설정 (0) | 2020.12.20 |
[PHP] 파일로 구현한 CRUD (0) | 2020.12.13 |
[PHP] PHP 기본 (0) | 2020.12.09 |