2012-07-31 3 views
3

INSERT SQL 문에서 PHP 변수를 사용하려고합니다. 필자는 이전에 이것에 대한 답변을 보았지만 광산은 작동하지 않습니다. 여기 .. ​​코드이다SQL에서 PHP 변수 사용

mysql_query("INSERT INTO message (message_id, from, content) values ('', " . $uid . ", 'test message content')"); 
+6

당신은 ** 정말로 ** 이것을 원하지 않습니다. 대신 http://stackoverflow.com/search?q=parameterized+sql을보십시오. – Nate

+1

SQL 주입 공격 및이를 방지하는 방법을 읽었습니다. 이것은 작동 할 수 있습니다. 그러나 당신은 공격자를 위해 매우 쉽게하기 때문에 이러한 것들에 대해 방어하고 있는지 확인해야합니다. 네이트가 말했던 것입니다. 쿼리를 매개 변수화했습니다. – Charleh

답변

11

주요한 문제는 fromreserved word이며 역 따옴표에 있어야한다는 것이다.

mysql_query("INSERT INTO message (message_id, `from`, content) VALUES ..."); 

그러나 더 이상 사용되지 않는 mysql_* 기능을 사용하지 마시기 바랍니다. PDO를 살펴보고 매개 변수가있는 명령문을 준비하는 것이 좋습니다.

+0

Ahhh .. 바보. Cant는 내가 직접 FROM 단어를 알아 차리지 못했다고 생각합니다. 고맙습니다! – TLD

0

MESSAGE_ID가 기본 키 인 경우, 당신은 당신이 값이 없으면 쿼리에 포함 할 필요가 없습니다 ..

mysql_query("INSERT INTO message (`from`, `content`) values (" . $uid . ", 'test message content')"); 
+1

message_id가 PK 인 경우에도 반드시 자동 증가가 아닙니다! – fvu

+1

re : 자동 증가, mysql4로 빈 문자열이 (잘못) 허용되었습니다. PHP5의 출현으로 이러한 동작이 멈추었 기 때문에 J A가 말한 것처럼하거나 정수 0 (따옴표 제외)을 사용해야한다. 내가 업그레이드했을 때 나를 붙잡아 라. – Cups

0

는 쿼리에서 적어도 세 가지 문제가 있습니다. 그 중 두 가지는 구문 오류이고 하나는 큰 취약점입니다. 다음과 같이

쿼리 작업을하려면, 당신이 그것을 작성해야 : 여기

mysql_query("INSERT INTO message (message_id, `from`, content) values ('', '" . $uid . "', 'test message content')");` 

가 오류의 요약이다 :
- 다른 사용자가, 표시 "에서"다른 이름으로 키워드이고 당신은 사용하지 말아야합니다 테이블 열의 이름을 지정합니다. 이러한 이름을 실제로 사용하려면 backticks를 사용하여 쿼리에서이를 나타내야합니다.
- $ uid 값은 작은 따옴표로 묶어야합니다.
- 세 번째로 가장 중요한 오류는 쿼리가 SQL Injection에 취약하다는 것입니다. 그러한 공격으로부터 당신을 보호 할 준비가되어있는 진술을 사용해야합니다.