테스트 사이트 - 개발 중인 베타 버전입니다

PHP를 배우는 도중에 몇가지 물어봅니다. 채택완료

휴가 11년 전 조회 3,936

$sql="CREATE TABLE game(FirstName CHAR(30),LastName CHAR(30),Age INT)"; 

 

위와같이 테이블은 생성하는 구문에서요.

CHAR(30), INT이 무엇을 뜻하는 것인가요?

 

<html>

<body>

<form action="insert.php" method="post">
Firstname: <input type="text" name="firstname">
Lastname: <input type="text" name="lastname">
Age: <input type="text" name="age">
<input type="submit">
</form>

</body>

</html>

 

============================================================================

 

<?php

$con=mysqli_connect("example.com","peter","abc123","my_db");
// Check connection
if (mysqli_connect_errno()) {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

// escape variables for security
$firstname = mysqli_real_escape_string($con, $_POST['firstname']);
$lastname = mysqli_real_escape_string($con, $_POST['lastname']);
$age = mysqli_real_escape_string($con, $_POST['age']);

$sql="INSERT INTO Persons (FirstName, LastName, Age)
VALUES ('$firstname', '$lastname', '$age')";

if (!mysqli_query($con,$sql)) {
  die('Error: ' . mysqli_error($con));
}
echo "1 record added";

mysqli_close($con);

?>

 

입력폼에 한글을 입력하고 POST값으로 넘겨줬더니

DB에 한글이 깨어져서 저장이 됩니다.


이거 어떻게 해결을 하나요?

댓글을 작성하려면 로그인이 필요합니다.

답변 3개

채택된 답변
+20 포인트

답변에 대한 댓글 2개

휴가
11년 전
정말 감사합니다
휴가
11년 전
아 그런데 페이지 인코딩을 하니까
페이지에 표시되는 한글은 정상적인데
DB테이블에 입력되는게 깨져서 입력됩니다;

댓글을 작성하려면 로그인이 필요합니다.

11년 전

CHAR(30), INT 는 테이블 생성시 DB 필드의 자료형을 지정하는 것입니다.

 

CHAR(30) = CHARACTER (1 byte) * 30 = 30 bytes (문자 30개 저장 가능)

INT = INTEGER (4 byte) = 4 bytes (–2,147,483,648 ~ 2,147,483,647 범위의 숫자 저장 가능)

 

그리고 한글이 깨지는 문제는

입력받은 한글 인코딩과 DB 한글 인코딩이 일치하지 않는듯합니다. (대게 euc-kr, utf-8 간의 문제)

 

입력받은 한글값이 넘어오면 DB 인코딩에 맞게 변환을 한뒤 DB에 INSERT 해주면 됩니다. 

인코딩 문제에 대한 자세한 내용은 링크를 걸어둡니다.

http://ceomk.tistory.com/47">http://ceomk.tistory.com/47 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 2개

타폴
11년 전
답변쓰기 상태에서 잠시 자리비웠다가 와서 글작성 버튼을 누르니... 그새 답변이 많이 달리고 채택까지 끝난 상태네요ㅎㅎ;;
휴가
11년 전
자세한 설명 감사합니다.
벌써 윗분의 내용으로 문제를 해결한 상태라 ^.^
채택을 두번이 가능하면 좋겠는데 그게 안되는 관계로 ㅎㅎ
정말 감사합니다.

댓글을 작성하려면 로그인이 필요합니다.

11년 전

DB 셋팅상에 인코딩이 페이지 인코딩과 동일한지 살펴보세요

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

휴가
11년 전
앗 latin 머시기로 되있네요.
감사합니다.

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인