목차
- PHP를 MySQL과 연동하는 3가지 API_mysql/mysqli/PDO
- mysqli API
- 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로 | $link =mysqli_connect ('localhost', 'root', 'PW', 'database'); $sql = "SELECT * FROM table"; $result = mysqli_query($link, $sql); while ($row = mysqli_fetch_array($result)) { |
mysqli_real_escape_string ($link, $escapeString) | SQL쿼리문에서 사용되는 문자열에서 특수 문자를 회피해 SQL인젝션을 방어할 수 있는 API. MySQL과 연결하는 변수와 escape형태로 만들어 줄 변수를 입력한다 | $article = array( 'title' => 'title', 'description' => 'description' ); if(isset($_GET['id'])) { $sql = "SELECT * FROM table $article['title'] = $row['title']; |
* 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로 처리하기 때문에 반복문이 끝난다.