PHP를 배우는 도중에 몇가지 물어봅니다.
본문
$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
1번 답 : 데이터 입력되는 값의 형식을 정의하는 것입니다. 아래 링크 참조
2번 답 : 페이지 인코딩 선언하세요
DB 셋팅상에 인코딩이 페이지 인코딩과 동일한지 살펴보세요
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 해주면 됩니다.
인코딩 문제에 대한 자세한 내용은 링크를 걸어둡니다.
답변을 작성하시기 전에 로그인 해주세요.