2014-07-11 2 views
1

그래서 다운로드 횟수를 추적 할 수 있도록 내 사이트에서 다운로드 데이터베이스를 설정했으며 저와 제 동료들이 데이터베이스에 새 다운로드를 삽입하도록 프런트 엔드를 설정하려고합니다. PHP를 주로 사용하여 프론트 엔드를 설정하고 있습니다.여기서 SQL/PHP 구문이 잘못 되었습니까?

내 페이징 설정 방법은 단순히 내 양식의 게시 가능성을 제거하므로 대신 JS에서 데이터를 serialize하고 페이지를 다시로드 한 다음 PHP에서 데이터의 병합을 해제하고 값을 mysql 쿼리에 집어 넣고 그것을 실행하려고합니다.

가 여기 내 SQL 코드는 PHP의 내부의 모습입니다 :이 문자열로 바뀝니다

$sql = "INSERT INTO dl (id, file, desc) VALUES ('$idd', '$file', '$desc')"; 

: 페이지를 실행하려고 할 때

INSERT INTO dl (id, file, desc) VALUES ('a56', 'test.zip', 'cake') 

그러나, 나는이 오류가 :

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 'desc) VALUES ('a56', 'test.zip', 'cake')' at line 1

그리고 그 이상한 점은 쿼리를 실행하는 코드 줄이 라인 1. 그것은 28

어떤 도움에 감사드립니다 라인입니다 :)

+2

열의 이름을 변경하면 파일과 desc가 예약 될 수 있습니다. –

+1

예 Desc는 mysql에서 미리 정의 된 키워드입니다. 우리는 정렬 매개 변수 –

답변

6

desc은 MySQL의 경우 reserved keyword입니다.

권장 해결 방법은 입니다. 백틱은입니다. MySQL manual에서 : When to use single quotes, double quotes, and backticks in MySQL

+2

당신은 여분의 마일을 가야하고 모든 필드와 테이블 이름을 역 인용 할 수 있습니다. –

+0

저에게 도움이 되시겠습니까? 아니면 미래에 이것을 보호 해 주시겠습니까? – Zbee

+0

예약 키워드를 사용해서는 안되지만 간단히 백틱으로 사용하라고 주장하는 경우에는 반드시 사용해야합니다. – Tushar

1

desc는 SQL에서 예약 된 단어입니다.

결과의 정렬 순서를 결정하는 데 사용되는 숫자는 (ASC과 함께)입니다.

+1

을 사용합니다.'file'도 예약되어 있습니다 : https://www.drupal.org/node/141051 –

+0

이 경우 활용할 수있는 임시 해결책이 있습니까? 편집 : 신경 쓰지 마, Tushar의 대답은 일했습니다 :) – Zbee

+1

@ Zbee 당신은 칼럼 이름을 arround backticks를 사용해야합니다. – Jens

1
:

$sql = "INSERT INTO dl (id, `file`, `desc`) VALUES ('$idd', '$file', '$desc')"; 

도이 문제를 살펴 보자 :

If an identifier contains special characters or is a reserved word, you must quote it whenever you refer to it.

테이블 또는 열 이름을 변경하는 것은 가능하지 않은 경우, 역 따옴표의 잘못된 식별자 (`) 포장

MYSQL에 의해 예약 된 desc의 열 이름을 변경하십시오. 자세한 내용은 MYSQL Reserved Words

http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html

1

에 예약 된 단어의 목록을 참조하십시오이를 시도하십시오.

$sql = "INSERT INTO dl (`id`, `file`, `desc`) VALUES ('".$idd."', '".$file."', '".$desc."')"; 

희망이 유용합니다.

관련 문제