2012-12-17 4 views
1

SQL 코드를 테이블 열 중 하나에 삽입하려면 SQL을 작성하려고합니다. 테이블에는 email, 인증 코드, sql의 세 열이 있습니다.PHP/MySQL의 데이터베이스에 SQL 코드 삽입

나는이 코드를 시도, 등, 그들을 탈출/인용 부호 및 백 슬래시와 함께 장난 그것의 변화, ...하지만 뭔가 아직도 잘못 :

INSERT INTO pre_registration(email, verification_code, sql) VALUES('[email protected]', '8efb100a295c0c690931222ff4467bb8', '"INSERT INTO customer(title) VALUES(\'Mr.\')"') 

그것은 나에게 말한다 오류가 SQL에있다 구문 :

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 'sql) VALUES('[email protected]', '89f0fd5c927d466d6ec9a21b9ac34ffa', "INSER' at line 1 

수행 방법은 무엇입니까? PHP/MySQL을 사용하고 있습니다.

+0

이 정확히 어떤 오류를보고 않습니다

마지막으로, 상황에 따라 준비하고 바인딩 매개 변수를 사용하여 데이터 항목의보다 안전한 방법이 될 수있다? 그리고 RDBMS는 무엇입니까? 실제로 대부분의 경우 올바르게 작동하는 것 같습니다. –

+0

질문을 편집하여 오류를 포함 시켰습니다. 나는 PHP/MySQL을 사용하고있다. – user961627

+1

'SQL'은 [MySQL 예약어] (http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html)입니다. 열 이름으로 사용하려면 백틱으로 인용해야합니다. –

답변

1

정확한 SQL 오류에 대한 통찰력이 도움이 될 것입니다. 언뜻 나는 테이블 이름과 열린 괄호 사이 및 값과 열린 괄호 사이에 공백을 적용해야한다고 말하고 싶습니다.

또한 SQL 부분에 대해 큰 따옴표를 사용하면 확실하지 않지만 오류가 발생할 수 있습니다. 작은 따옴표 사이에있는 것은 문자 그대로 해석되므로 이스케이프 문자는 실제로 저장된 데이터 내에서 슬래시가되어야합니다.

또한 sql은 사용을 위해 인용해야하는 예약어입니다.

try 
{ 
    $conn = new PDO ("sqlsrv:server = $serverstringname; Database = $logindatabase", "$loginusername", "$loginpassword"); 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
} 

catch (PDOException $e) 
{ 
    print("Error connecting to SQL Server."); 
    die(print_r($e)); 
} 

$email = '[email protected]' //or some other way of setting the variable like $_POST 
$verification_code = '#####' //or $_Post method 
$sql = 'Put Query Here' //probably have to declare this explicitly 

$sql_insert = "INSERT INTO pre_registration_info (email, verification_code, 'sql') VALUES (?,?,?)"; 
     $stmt = $conn->prepare($sql_insert); 
     $stmt->bindValue(1, $email); 
     $stmt->bindValue(2, $verification_code); 
     $stmt->bindValue(3, $sql); 
     $stmt->execute(); 
+0

''sql ''은 따옴표로 묶지 말아야합니다. –

4

MySQL은 sql을 키워드로 간주합니다. 당신은 그것을 인용해야한다 :

INSERT INTO pre_registration(email, verification_code, `sql`) VALUES('[email protected]', '8efb100a295c0c690931222ff4467bb8', '"INSERT INTO customer(title) VALUES(\'Mr.\')"') 

그런데 bakslashes를 사용하는 대신에 이스케이프 문자를 인용 부호로 사용한다. 이것은 SQL보다 친숙합니다.

INSERT INTO pre_registration(email, verification_code, `sql`) VALUES('[email protected]', '8efb100a295c0c690931222ff4467bb8', '"INSERT INTO customer(title) VALUES(''Mr.'')"') 
+0

MySQL에서 따옴표는 백 슬래시로 이스케이프 처리 될 수 있습니다. –

+0

@MichaelBerkowski 좋습니다. – kmkaplan

관련 문제