일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 안드로이드 os 구조
- 스택 자바 코드
- jvm 작동 원리
- ANR이란
- rxjava disposable
- 클래스
- android retrofit login
- 안드로이드 레트로핏 crud
- 2022 플러터 안드로이드 스튜디오
- 안드로이드 유닛테스트란
- 안드로이드 라이선스 종류
- 스택 큐 차이
- 멤버변수
- 안드로이드 라이선스
- 서비스 vs 쓰레드
- 안드로이드 레트로핏 사용법
- 서비스 쓰레드 차이
- 안드로이드 유닛 테스트
- 플러터 설치 2022
- jvm이란
- android ar 개발
- ar vr 차이
- 안드로이드 유닛 테스트 예시
- 자바 다형성
- rxjava cold observable
- 2022 플러터 설치
- Rxjava Observable
- 객체
- 큐 자바 코드
- rxjava hot observable
- Today
- Total
나만을 위한 블로그
[PHP] PHP에서 INSERT문 사용 시 에러 해결(글 조회수) 본문
게시판을 만들고 이 안에서 글을 작성하기 위해 INSERT 문을 사용했는데, 글 작성이 완료됐다는 alert는 정상 출력되지만 DB에 저장도 안 되고 게시판 안에 출력되지도 않았다.
원인이 무엇인지 생각해봤다.
1. DB 설정 오류
2. SQL문 오타(컬럼명과 값 이름 등)
3. php 변수 오타
4. DB 연결 안 됐는데 난 됐다고 생각한 걸지도?
먼저 4번 원인부터 확인했다. DB 연결은 아래와 같이 했다.
session_start();
header('Content-Type: text/html; charset=utf-8'); // utf-8인코딩
$db = new mysqli("localhost", "root", "비밀번호", "DB 이름");
$db->set_charset("utf8");
function mq($sql)
{
global $db;
return $db->query($sql);
}
전에 했었지만 한번 더 확인하고자 dbconn.php 파일을 별도로 만들어 다시 확인해봤다.
dbconn.php 파일의 내용은 아래와 같다.
// $conn = mysqli_connect("localhost", "root", "비밀번호", "DB 이름"); <- php에서 MySQL에 연결하는 함수는 2개가 있다. 이걸로 해도 된다.
$conn = new mysqli("localhost", "root", "비밀번호", "DB 이름");
if ($conn->connect_error) {
die("연결 실패 : " .$conn->connect_error); // 연결 실패 시 원인을 출력한다
} else {
echo "연결 성공"; // 연결 성공 시 웹 페이지 좌상단에 연결 성공이라는 문구를 출력한다
}
결과는 연결 성공이 출력됐고, 이걸로 4번 원인은 아니라고 판단했다.
다음은 3번 원인이다. php 변수에 오타가 있다면 웹 페이지에 출력이 됐겠지만, 혹시 몰라서 유, 에스, 아이, 디 식으로 한 글자씩 읽으며 내 의도와 똑같은 변수명을 지정해준 게 확실한지 확인했다.
두 번 정도 읽었지만 틀린 곳은 없었다. 이걸로 3번 원인도 아니다.
다음은 2번 원인이다. SQL문 오타. 이 에러일 거란 직감이 강하게 들었다. 엔간하면 다 이놈한테서 발생하는 에러기 때문에 SQL문을 확인하는 사이트에서 확인해봤다.
https://www.eversql.com/sql-syntax-check-validator/
여기에 INSERT 문을 넣고 돌려봤다.
그런데 결과는 정상이라는 거다.
????????????????????????? 그럼 뭐야????
그래서 마지막으로 1번 원인을 확인해봤다. 하이디 SQL을 켜서 DB 설정을 다시 확인해봤다.
처음에는 잘 보이지 않았다. 그래서 아이디어를 기록해 둔 메모장을 켜서 처음 DB 설계했을 때의 내 의도와 비교해가며 DB를 확인했다.
이것까지 보고 나서야 알았다. 조회수 컬럼(hit)이 문제였다.
조회수는 기본값이 0부터 시작하는 컬럼이어야 한다.
그런데 난 '기본값 없음'으로 설정해뒀다. 바로 기본값을 0으로 바꾸고 다시 글 작성을 시도했다.
$sql = "INSERT INTO board(name, pw, title, content, date)
VALUES('".$_POST['name']."', '".$userpw."', '".$_POST['title']."', '".$_POST['content']."', '".$date."');";
$result = mysqli_query($db, $sql); // DB 연결 결과와 SQL문을 $result 변수 안에 넣고
if ($result === false) { // false가 나왔다면 무슨 에러인지 출력한다(29번 줄의 태그를 주석 쳐야 제대로 볼 수 있다)
echo mysqli_error($db);
}
잘 된다.
조회수 컬럼은 기본값 없음으로 설정하는 게 아니라 기본값을 0으로 설정해야 한다...
애초에 내가 생각없이 DB를 만든 게 잘못이었다. 이거 때문에 날려버린 내 하루...
'PHP' 카테고리의 다른 글
[PHP] Fatal error: Uncaught Error: Call to undefined function mb_substr() 해결 시도 (0) | 2020.01.15 |
---|---|
[PHP] 아톰 주석 색깔 변경 (0) | 2020.01.15 |
[PHP] 크롬에서 console.log() 사용법 (0) | 2020.01.06 |
[PHP] Node.js와 socket I/O를 활용한 웹 실시간 전체 채팅 기능 구현 (0) | 2020.01.05 |
[PHP] Undefined index 에러 (0) | 2020.01.02 |