bskyvision$

[sqlite3] SQLite3와 PHP 연결하고 데이터 쓰고 읽기

코딩/데이터베이스
@2020-05-21 17:21:20

SQL이라는 친구가 있습니다. 이 친구도 일종의 프로그래밍 언어인데, 관계형 데이터베이스를 관리하는데 사용되는 언어입니다. 관계형 데이터베이스에는 MySQL, MariaDB, SQLite 등이 있습니다. 저는 그 중에서 가장 심플한 SQLite를 사용해서 데이터베이스를 관리해보도록 하겠습니다. 

 

SQL, 너는 데이터베이스를 관리하는데 사용되는 코딩 언어구나! [출처: Photo by  Tobias Fischer  on  Unsplash]

 

저는 SQLite를 이용해서 database.db라는 이름의 데이터베이스 파일을 만들었다고 가정하고 설명을 시작하도록 하겠습니다. 이 database.db 안에는 Person이라는 테이블이 있고, 그 안에는 ID라는 필드와 Name이라는 필드가 존재합니다.  

 

 

1. SQLite3과 PHP 연결하기

PHP를 이용해서 SQLite3의 데이터베이스를 연결하려면 다음과 같이 코드를 작성하시면 됩니다. 

 

<?php

$DB = new SQLite3('database.db');

if($DB->lastErrorCode() == 0){
	echo "Database connection succeed!";
}
else {
	echo "Database connection failed";
    echo $DB->lastErrorMsg();
}

?>

 

위 코드에서 데이터베이스가 제대로 연결되었다면 lastErrorCode()는 0을 반환합니다. 따라서 if 문의 명령이 실행되죠. 제대로 연결되지 않았을 때는 0이 아닌 다른 수가 나오기 때문에 else 문의 명령이 실행됩니다. lastErrorMsg()는 가장 최근에 실패한 SQLite 요청을 반환합니다. 

 

2. 데이터 쓰기

주어진 데이터베이스에 쿼리를 실행하려면 exec()를 사용합니다. 테이블 내의 특정 필드에 데이터를 쓰려면 INSERT를 사용합니다. (참고로 데이터를 갱신하려면 UPDATE, 삭제하려면 DELETE를 사용합니다.) 저의 경우에는 ID는 자동적으로 하나씩 커지게 autoincrement로 설정해놨으므로 Name 필드에 대한 데이터만 써주면 됩니다. bskyvision이라는 이름을 추가하도록 코드를 짜보겠습니다. 

 

<?php

$DB = new SQLite3('database.db');

$DB->exec("INSERT INTO 'Person' ('Name') VALUES ('bskyvision');");

?>

 

3. 데이터 읽기

SQL 쿼리를 실행하는 함수에는 query()도 있습니다. 위에서 언급한 exec()는 데이터를 쓰고 갱신하고 지울 때 사용하고, 읽을 때는 query()를 사용합니다. 두 함수에 대한 소개를 자세히 보면 조금 차이가 있습니다. 

 

SQLite3::exec - Executes a result-less query against a given database [5]

SQLite3::query - Executes an SQL query [6]

 

데이터를 읽을 때는 SELECT 구문을 사용합니다. 그러면 Person 테이블의 행들을 한 줄씩 읽은 후 그중 Name 필드에 저장되어 있는 데이터만 출력하는 코드를 작성해보도록 하겠습니다. 

 

<?php

$DB = new SQLite3('database.db');

$result = $DB->query("SELECT * FROM 'Person';");

while($row = $result->fetchArray(SQLITE3_ASSOC)){         
        echo $row["Name"];
}

?>

 

위 코드를 실행시키면 Name 필드에 저장되어 있던 데이터들을 순차적으로 읽어서 출력시켜줍니다. 

 

혹시 질문이 있으시거나 제 설명이 잘못된 부분이 있다면 댓글을 남겨주시길 바랍니다. 끝까지 읽어주셔서 감사합니다! 

 

 

<참고자료>

[1] https://wikidocs.net/book/1530, 최용, "SQLite로 가볍게 배우는 데이터베이스"

[2] http://codelala.net/php-sqlite3-%ec%97%b0%eb%8f%99%ed%95%98%ea%b8%b0/, lala, "PHP - SQLite3 연동"

[3] https://www.php.net/manual/en/sqlite3.lasterrorcode.php, php.net, "SQLite3::lastErrorCode"

[4] https://www.php.net/manual/en/sqlite3.lasterrormsg, php.net, "SQLite3::lastErrorMsg"

[5] https://www.php.net/manual/en/sqlite3.exec, php.net, "SQLite3::exec"

[6] https://www.php.net/manual/en/sqlite3.query, php.net, "SQLite3::query"

댓글

  1. BlogIcon DNA구너 @2020.05.22 00:39 신고   댓글주소   수정/삭제   댓글쓰기

    쿼리 날릴때 인덱스 타는게 중요하다는데 그건 어떻게 확인이 가능한가요?

[1] [···] [183] [184] [185] [186] [187] [188] [189] [190] [191] [···] [538]