2013-07-23 9 views
0

나는이 다음 SQL 코드를 가지고 :는 SQL

$sql = "INSERT INTO data (Artist, Name) VALUES ('TF2', 'you're right behind me')"; 

코드 자체는 정상 보이지만 어떤 이유 mysql을 허용하고 싶지 않은 날이 그것을 저장합니다. 나는 다음과 같은 오류가 발생합니다 : 나는 문제는 MySQL의에 예약 된 단어 "오른쪽"입니다 알고 있지만 내가 어떻게해야 내 코드 모양처럼 저장할 필요가있는 무엇

"#1064 - 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 're right behind me')' at line 1" 

. 모든 도움을 주실 수 있습니다

+1

나는 그것이 "당신이 바로 그 뒤에있다"라고 덧붙였다. 어쩌면 당신은 백 슬래시를 사용하여 그것을 벗어날 수 있습니까? – JunM

+0

쉼표를 이스케이프 처리해야합니다. 예를 들어'You \ 're'을 사용하십시오. 'addslashes'라고하는 함수가 있습니다. 이 문제에 관한 PHP 매뉴얼을 참고하십시오. –

+1

이스케이프 SQL 매개 변수. 각각의 db 라이브러리는 문자열 (mysql_escape_string, mysqli_real_escape_string 등)을 올바르게 이스케이프하기위한 연결 인코딩과 같은 것들을 고려할 자체 함수를 가지고 있습니다. 더 좋게는 바인딩 된 매개 변수를 사용하므로 수동으로 이스케이프하지 않아도됩니다. – Orangepill

답변

0

을 탈출하는 대신 you\'re를 사용하여, 당신은 두 가지 문제가 있습니다. 첫 번째는 Name이 예약어라는 것입니다. 두 번째는 작은 따옴표로 묶인 문자열 안에 작은 따옴표가 있다는 것입니다. SQL을 다음과 같이 변경하십시오.

$sql = "INSERT INTO data (`Artist`, `Name`) VALUES ('TF2', 'you\'re right behind me')"; 
+1

이것은이 특정 exempel에서 작동하지만 이름은 사용자가 제출했으며 때때로 다를 수 있습니다. 영구 솔루션이 있습니까? –

+0

@AmandaWood http://php.net/manual/en/function.addslashes.php –

+0

@Fred Thanks. :) –

0

you're'이 있으니 문제가 있습니다. 그래서 당신의 문장은 당신의 문장에서 일찍 끝나고 있습니다. 문자 @Fred 및 @JunM이 이미 댓글을 달았으로 '

$sql = "INSERT INTO data ('Artist', 'Name') VALUES ('TF2', 'you\'re right behind me')"; 
0

MySQL에 대한 경험은 제한적이지만 SQL Server를 광범위하게 사용합니다. 내게는 문제가 "내 뒤에 오른다"라는 사도직에 사용 된 것으로 보인다. SQL 서버에서 필자는 SQL 명령이 같은 것, 그래서 이중 apostrophy를 사용합니다 (있는 you''re에서 이중 apostrophy 통지)해야 할 것 :이 도움이

$sql = "INSERT INTO data (Artist, Name) VALUES ('TF2', 'you''re right behind me')"; 

희망을. 감사합니다.

+0

이것이 잘못되었습니다. 'with \'로 탈출해야합니다. – ObieMD5

+0

@ ObieMD5를 설명해 주셔서 감사합니다. SQL Server에서 큰 따옴표를 사용합니다. 감사합니다 – aplon

+2

매개 변수가있는 쿼리에 대한 또 다른 인수 ... 이스케이프는 데이터베이스 방식으로 수행됩니다. – Orangepill