2011-09-26 9 views
1

문제점이 있습니다. php에서 이와 같이 삽입하면 :MySql 이진 데이터를 db에 오류없이 삽입하십시오.

sql = "INSERT INTO mytable (id, value) 
VALUES ('sds83','".$EncryptedString."')"; 

다음 쿼리를 실행하면 가끔 작동하지만 가끔은 그렇지 않습니다. 문제는 $ EncryptedString에 ':') ') 과 같은 문자가 포함되어 구문 오류가 발생한다는 것입니다. $ EncryptedString은 바이너리 데이터를 포함하고 있는데 어떻게이 문제를 해결할 수 있습니까?

답변

2

탈출

mysql-real-escape-string

는 mysql_real_escape_string()는 MySQL의의 라이브러리 함수를 호출 \ x00, \ n, \ r, \, ', "및 \ x1a 문자 앞에 백 슬래시를 붙이는 mysql_real_escape_string

참조 StripSlashes

+0

원래 문자열은 이미 이스케이프 처리되었지만 mcrypt를 사용하여 암호화되었고 새로운 암호화 된 값이 $ EncryptedString에 저장되었습니다. 내가 다시 이스케이프하면 DB에서 데이터를 가져올 때 문자열을 암호 해독 할 수 있도록 모든 문자가 보존됩니까? – user962449

+0

아니요, 데이터를 가져올 때 이스케이프 처리를하지 않으면 stripslashes가 사용됩니다 http://www.php.net/manual/en/function.stripslashes.php 그리고 모든 것이 잘 될 것입니다 – Mob

+0

나는 이해하지 못합니다. . 문자열이나 스트라이프 슬래시를 이스케이프하도록 권하고 있습니까? 나는 $ EncryptedString의 값을 바꿀 것이기 때문에 어느 쪽도 작동하지 않을 것이라고 생각한다. 이스케이프 또는 스트라이크를 $ EncryptedString을 삽입 할 때 삽입하면 암호화 된 문자열의 값이 변경되고 나중에 데이터베이스에서 가져올 때 문자열을 해독하는 데 중요한 슬래시가 누락됩니다. 내가 놓친 게 있니? 또는 mysql 이스케이프 및 스트립 슬래시가 다르게 작동합니까? – user962449

0

$EncryptedString을 탈출해야합니다. 사용하고있는 MySQL의 연결 개체/기능의 종류에 따라서는 다음과 같이 될 수있다 : 당신의 암호화 된 문자열

$sql = " 
    INSERT INTO mytable (id, value) 
    VALUES ('sds83','" . mysql_real_escape_string($EncryptedString) . "')"; 
+0

$ EncryptedString의 값을 변경하지 않겠습니까? 앞으로 문자열을 해독 할 수 없습니까? – user962449

+0

아니요, 그가해야 할 일은 10 세가 아니며 매개 변수를 지원하는 mysql 인터페이스를 사용하는 것입니다. –

1

준비된 문을 지원하는 PDO (또는 다른 데이터베이스 계층)를 사용하십시오.

원시 SQL을 실행하는 대신 쿼리 매개 변수를 사용하면 속도 향상 (데이터베이스가 하나의 쿼리 만 계획하고 최적화해야 함) 및 매개 변수에 쓰는 모든 데이터가 쿼리 자체와 즉시 완전하게 격리됩니다 .

놀랍게도 많은 사람들이이를 제대로 갖추고 있지 않습니다. 주도권을 쥐고 코드를 업데이트하십시오.

관련 문제