2013-02-05 2 views
0

내 머리카락을 더 이상 찢어 버리지 않기 위해서, PHP MySQL과 함께 번거로운 시간을 보내고 있기 때문에 여기서 질문을 던지 리라고 생각했습니다. 업데이트 : 꽤 많이 사용하고 이해할만한 것으로 생각합니다!MySQL 업데이트에서 헤더 이름을 허용하지 않습니까?

기본적으로 MySQL 업데이트 기능을 중단시키는 것으로 알려진 테이블 헤더 이름이 있습니까? 내가 코드에 '트리거'라는 테이블 헤더를 포함 할 경우

UPDATE table_name SET 
part_number='000 - New Product', 
product_code='1', 
barcode_ref='1', 
type='new type' 
WHERE id='999' 

그러나, 그것은 나누기 : 나는 예를 들어, 완벽하게 작동하는 업데이트는 mysql_query 기능이! 나는 '트리거'라는 컬럼의 동일한 복사본을 만들어 'testing_t'을 다시는 이름의 즉시 모든 것이 이전과 완벽하게 작동 한 **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 'trigger='YES', part_number='000 - New Product', product_code='1', barcod' at line 1**

:

UPDATE table_name SET 
part_number='000 - New Product', 
trigger='YES', 
product_code='1', 
barcode_ref='1', 
type='new type' 
WHERE id='999' 

위의 SQL은의 오류를 반환합니다. 둘 다 내 mysql_real_escape_string을 사용하여 업데이트 명령에 사용하기 위해 변수를 덤프 시도하고 인라인, 그리고 하드 코딩 문자열을 시도하고 여전히 휴식.

누구든지이 문제에 관해 밝힐 수 있습니까? 이상 적으로는 사이트 전체에서 참조를 수정하고 싶지 않기 때문에 표 머리글 이름을 변경하지 않아도됩니다. 분명히 다른 옵션이 없다면 나는 할 것이다. 그러나 나는 바보가되어서 누군가가 왜 일어나는 지/일어나는 것을 어떻게 멈추는 지 설명 할 수 있기를 바라고있다. 사전에

감사합니다,

+1

있습니다. 트리거는 연관된 DML 문이 실행될 때 자동으로 트리거됩니다. 그래서 테이블에 필드 이름 트리거를 사용할 수 없다. 트리거 컬럼 이름을 바꿀 필요가있다. –

+1

예약어와의 충돌을 피하기 위해 백틱 문자를 사용하여 MySQL 테이블 이름과 열 이름을 이스케이프 처리한다. 그러나 일반적으로 열 이름에 SQL 예약어를 사용하는 것을 피하는 것이 좋습니다. 나중에 코드의 독자 나 다른 독자가 혼란을 일으킬 수 있기 때문입니다. – SDC

+0

답장을 보내 주셔서 감사합니다. 그럴 수도 있다고 생각했습니다.열 이름을 이스케이프했는데 이름이 완전히 바뀌므로 이름 바꾸기 만 유일한 옵션입니다! – JoeP

답변

3

사용이 쿼리

UPDATE table_name SET 
`part_number`='000 - New Product', 
`trigger`='YES', 
`product_code`='1', 
`barcode_ref`='1', 
`type`='new type' 
WHERE id='999' 

당신이 ``

trigger없이 trigger을 쓴 만들기위한 MySQL의에서 단어를 예약되어 있기 때문에 쿼리가 실패합니다 트리거.

``

2

trigger는 MySQL의 키워드입니다. 모든 열 이름을``안에 넣으면 안전합니다. 이러한 키워드를 열 이름으로 사용하지 않는 것이 좋습니다.

다른 키워드는 트리거가 삽입 같은 DML 문, 업데이트 데이터베이스 테이블에서 실행되어 삭제하면 해고되는 PL/SQL 블록 구조 여기 http://dev.mysql.com/doc/refman/5.0/en/reserved-words.html

+0

고맙다, 당신은 엔 클로징 컬럼 이름이 유효한 옵션이라고 확신 하는가? 어쨌든 열의 이름과 그 참조를 바꾸 겠지만 각 헤더 이름을 ''로 캡슐화하려고 시도했지만 실패했습니다. – JoeP

+2

@JoeP, 역 인용 부호를 사용해야합니다. – rsanchez

+0

@rsanchez 감사합니다! – JoeP

관련 문제