2011-03-10 2 views
0

삽입 된 값에 "728011955"와 같은 숫자 만 포함 된 경우 완벽하게 작동하지만 값에 "1lKw7Rcc1iM8WB9c"와 같은 문자가 포함되어 있으면 삽입에 실패합니다.MySQL 삽입 문제

다음은 실패한 쿼리입니다.

$query = ("INSERT INTO $tbl_name VALUES ($key, $timestamp, $use)"); 

mysqlerror() 출력은 다음과 같습니다.

Unknown column '1lKw7Rcc1iM8WB9c' in 'field list' 

도움말! :)

답변

7

매개 변수를 인용해야합니다.

$query = ("INSERT INTO $tbl_name VALUES ('$key', '$timestamp', '$use')"); 

그러나 이러한 변수가 프로그램 외부에서 오는 경우이 쿼리가 취약 할 수 있으므로 SQL 주입 공격에 대해 읽어보십시오.

+0

우승자가 있습니다! 이제 작동합니다! 고마워, Cfreak! 하이 파이브! – Brandon

+0

일반적으로 [매개 변수 바인딩] (http://php.net/manual/en/function.db2-bind-param.php)을 사용하면 값을 쿼리에 직접 삽입하는 것보다 낫습니다. –

+0

@Ted Hopp 또는 [prepared statements] (http://php.net/manual/en/pdo.prepared-statements.php). – ubiquibacon

0

딱딱하지 말고 왜 바깥 괄호를 사용해야하나요? 즉이는 잘 작동하고 읽기 쉬울 것이다 : 당신의 오류에 대해서는

$query = "INSERT INTO $tbl_name VALUES ('$key', '$timestamp', '$use')"; 

는 숫자 값 (처럼 어쩌면 당신의 키와 타임 스탬프 값) 인용해서는 안 테이블 이름에 대한 동일. 반면 문자열 유형에는 따옴표가 필요합니다.

다른 사람들은 매개 변수 바인딩과 준비된 명령문을 사용하여 SQL을 더욱 안전하게 만들었지 만 또 다른 가능성은 use sprintf입니다.