2012-08-07 5 views
1

여기에 하나의 작은 문제가 발생했습니다 :이름 MySQL 테이블 열

PHP를 통해 하나의 MySQL 쿼리를 입력합니다.

INSERT INTO table (q1,q2,q3-1) VALUES ('".$_POST['Q1']."', '".$_POST['Q2']."'...) 

다음과 같은 오류가 나타납니다 :

내가 다음에 쿼리를 변경할 때

INSERT INTO table (q1,q2,q3) VALUES ('".$_POST['Q1']."', '".$_POST['Q2']."'...) 

를 다음 오류가 : 나는 연결이 잘 작동하고 다음과 같은 것이 보이는 확인했다

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-1) VALUES ('N', 'asdfasdf', '')' at line 1

지금 내가 생각하고하는 것은 그것 때문에 :

  1. 테이블 열의 이름을 'q3-1'
  2. 또는 기타 다른 문제입니까?

대신 q3_1로 변경하면 괜찮습니까?

+2

스위치 하이픈을 밑줄로 열을 명명 할 때. 또한 MySQL에는 예약어 목록이 있으므로 기억해 두는 것이 좋습니다.'\'column_name \'' – DavidS

+0

q3-1은 SQL에 대한 연산처럼 보입니다. q3_1 또는 다른 명명 규칙을 사용하는 것이 가장 좋습니다. – Jim

+0

열은 종종 철자하기가 어렵습니다.;) –

답변

1

q3-1 때문에 두 번째 쿼리에서 오류가 발생했습니다. 그것은 따옴표로해야한다 :

INSERT INTO table (`q1`,`q2`,`q3-1`) ... 
+1

질문을 읽는 것이 때때로 좋은 것입니다. '지금, 생각하고 있습니다. 이유는 무엇입니까 : 저는 테이블 coloumn을'q3-1 ' – zessx

4

, 그것은 확인을

즉되어야한다. PDO을 살펴보십시오.

INSERT INTO table (q1,q2,`q3-1`) 
VALUES ('".$_POST['Q1']."', '".$_POST['Q2']."'...) 
4

사용 역 따옴표 : 당신은 필드 이름 주위에`역 따옴표를 넣으면

INSERT INTO table (q1,q2,`q3-1`) VALUES ('".$_POST['Q1']."', '".$_POST['Q2']."'...) 
1

열을 역 따옴표로 이름을 탈출 (`)

INSERT INTO table (`q1`, `q2`, `q3-1`) 
VALUES ('".$_POST['Q1']."', '".$_POST['Q2']."'...) 

그러나이 문은 SQL Injection에 취약합니다. PDO

전 함께 사용하십시오.)

<?php 
$stmt = $dbh->prepare("INSERT INTO table (`q1`, `q2`, `q3-1`) VALUES (?, ?, ?)"); 
$stmt->bindParam(1, $_POST['Q1']); 
$stmt->bindParam(2, $_POST['Q2']); 
$stmt->bindParam(3, $_POST['Q3']); 

$stmt->execute(); 

?>