![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUjNGK%2FbtrhUlng7tA%2FklOgcqxLcMTkitwWmLGBg0%2Fimg.jpg)
[PHP] 맨땅에 헤딩으로 게시판 만들기 (2)
Lpla
·2021. 10. 17. 21:25
게시판 만들기 (1) 포스팅을 하고 세 달이 흘렀다.
최근 한 달 정도 php를 사용할 일이 평소보다 많아지면서 실력도 단기간에 많이 끌어올릴 수 있었다.
그럼 지난번에 이어서 가보겠다.
4. PHP로 DB 컬럼 추가
이전 시간에는 phpmyadmin으로 4개의 컬럼(num title, content, date)을 추가했다.
하지만 게시판을 생성할 때 phpmyadmin에 접속하여 테이블을 만들고 컬럼을 추가하는 개발자는 없을 것이다.
이번에는 PHP로 컬럼을 추가하는 방법에 대해 공부해보겠다.
먼저 secret 컬럼을 추가하는데, 무작정 추가하는 것이 아니라 없을 경우에 추가하도록 컬럼을 확인하는 과정을 거쳤다.
$conn = mysqli_connect("아이피", "아이디", "패스워드", "DB명");
$sql = "SELECT * FROM notice";
$result = mysqli_query($conn, $sql);
/* 컬럼 확인 */
$secretCheck = "SHOW COLUMNS FROM `notice` LIKE 'secret'";
$secretResult = mysqli_query($conn, $secretCheck);
$exist = mysqli_num_rows($secretResult); // 0
이제 secret 컬럼이 없으면 0(false), 있으면 1(true) 값을 얻을 수 있다.
여기까지 만들고 생각하니 매번 다른 컬럼을 생성할 때마다 변수를 만들고 쿼리를 확인하는 과정이 번거로워서 함수로 만들어보았다.
$conn = mysqli_connect("아이피", "아이디", "패스워드", "DB명");
$sql = "SELECT * FROM notice";
$result = mysqli_query($conn, $sql);
/* 컬럼 확인 */
function column_check($col) {
global $conn;
$sql = "SHOW COLUMNS FROM `notice` LIKE '$col'";
$result = mysqli_query($conn, $sql);
global $exist;
$exist = mysqli_num_rows($result);
}
column_check('secret');
php 문법에 익숙하지 않아서 쉬운 함수임에도 시간이 꽤 걸렸는데 깔끔한 코드인지는 모르겠지만 아무튼 된다.
이제 컬럼의 존재유무를 확인할 수 있으니 조건문으로 해당 컬럼이 없을 경우에 컬럼을 추가하면 된다.
if ($exist == false) {
/* 컬럼 없으면 컬럼 추가 */
$sqlSecret = 'ALTER TABLE `notice` ADD COLUMN `secret` VARCHAR(40)';
// 객체지향 스타일
// $conn->query($sqlSecret);
// 절차지향 스타일
mysqli_query($conn, $sqlSecret);
echo "<script>alert(\"컬럼을 추가했습니다.\")</script>";
}
여기를 공부하면서 php의 객체지향과 절차지향에 대해서 처음 알게 됐다.
javaScript의 화살표 함수처럼 보이는 저 화살표(->)를 보아 하니 객체지향 스타일이 더 최신 기능인 것 같다.
객체지향 스타일이 더 편해 보이지만 기본기를 다지기 위해 전통적인 절자지향으로 당분간은 공부하기로 했다.
이제 페이지를 새로고침하고 phpmyadmin으로 db를 확인해보면 secret 컬럼이 새로 생긴 것을 확인할 수 있다.
원하는 컬럼 다음 열에 추가하는 방법과 컬럼을 생성할 때 초기값을 입력하는 방법도 알아봤다.
if ($exist == false) {
/* 지정 컬럼 다음에 추가 */
$sqlSecret = 'ALTER TABLE `notice` ADD COLUMN `secret` VARCHAR(40) AFTER `title`';
mysqli_query($conn, $sqlSecret);
/* 컬럼 초기값 입력 */
$sqlSecret = 'ALTER TABLE `notice` ADD COLUMN `secret` VARCHAR(40) default "초기값"';
mysqli_query($conn, $sqlSecret);
}
5. DB 컬럼 삭제
앞에서 추가한 secret 컬럼을 삭제하는 방법은 아래와 같다.
/* 컬럼 삭제 */
$secretDel = "ALTER TABLE `notice` DROP `secret`";
mysqli_query($conn, $secretDel);
하지만 DB를 삭제하는 것은 대단히 위험하고 신중하게 선택해야 한다.
컬럼을 삭제하는 대신 컬럼명을 바꿔서 해당 컬럼을 사용하지 않는다면 마치 삭제한 것과 유사하게 사용할 수 있지 않을까?
/* 컬럼명 변경 */
$secretChange = "ALTER TABLE `notice` CHANGE `secret` `del_secret` VARCHAR(40)";
mysqli_query($conn, $secretChange);
6. DB 컬럼값 수정
위 테이블에서 secret의 컬럼값을 바꾸려고 한다.
먼저 전체 행의 secret 컬럼값을 바꾸려면 어떻게 해야 할까?
/* 컬럼값 변경 */
$changeColumn = "UPDATE `notice` SET `secret` = '비밀글'";
mysqli_query($conn, $changeColumn);
그 결과 모든 행의 secret 컬럼값이 "비밀글"로 변경되었다.
하지만 실제로는 특정 조건을 만족하는 행(Row)의 컬럼값만 수정하는 일이 많을 것이다.
/* 조건을 만족하는 컬럼값 변경 */
$changeColumn = "UPDATE notice SET secret = '인사했음2' where title = '안녕하세요.'";
mysqli_query($conn, $changeColumn);
ALTER를 사용할 때는 백틱(`)을 사용하지 않으면 에러가 떴는데 여기서는 백틱 없이 잘 작동한다.
왜 그런지 궁금한데 그건 다음 기회에 알아보기로 하자.
그렇다면 특정 단어를 다른 단어로 일괄적으로 바꾸려면 어떻게 해야 할까?
/* 단어 변경 */
$changeColumn = "UPDATE notice SET secret = replace(secret, '비밀', '숨김')";
mysqli_query($conn, $changeColumn);
7. 컬럼 복사
secret 컬럼을 secret2 컬럼으로 복사하려면 컬럼을 생성한 후 복사하면 된다.
/* 컬럼 복사 */
// 컬럼 생성
$sqlSecret = 'ALTER TABLE `notice` ADD COLUMN `secret2` VARCHAR(40)';
mysqli_query($conn, $sqlSecret);
// 컬럼 복사
$copyColumn = "UPDATE notice SET secret2 = secret";
mysqli_query($conn, $copyColumn);
컬럼 추가, 삭제, 수정, 복사에 대해서 알아봤다.
이제 추가는 글쓰기 버튼, 삭제 버튼, 수정 버튼을 추가하여 위에서 배운 코드를 실행하도록 하면 그럴싸한 게시판이 완성된다.
다음에 이어서 작성하겠다.