누군가가 나에게 mysql 테이블의 크기가 제한된 열에 이스케이프 된 문자열을 저장하는 방법을 설명 할 수 있습니까? 내 말은, 만약 내가 "abcdefghij"를 삽입하면 한계에 도달했지만, "abcde'ghij"를 삽입하면 크기가 정의 된 열 (varchar (10)이라고 가정 해 봅시다)을 의미합니다. 나는 이스케이프 된 이후 한도를 초과합니다. 이 마지막 문자열의 결과는 원래 크기가 10이지만 "abcde \ 'ghij"입니다! 이것을 제어하는 방법?mysql 이스케이프 된 문자열 저장소
답변
당신이 중 하나는 (모든 문자가 탈출해야하는 가능성이 있다고 가정) 값을 두 번 공간을 할당하거나 저장할 때, 그것을 방출하지 않을 경우 텍스트를 탈출하여 문제를 치마해야합니다.
(두 번째 것은 읽는 것보다 더 자주 글을 쓸 때 단점이 있지만, 표시되는 방법이나 위치에 따라 다르게 탈출해야한다는 이점이 있습니다).
갱신 : 나는 MySQL은 삽입에 사용되는 추가 문자를 저장하지 않습니다 것을 알고 있지만 삽입 할 때 그것은 또한 이스케이프 된 작은 따옴표를 위해 \'
를 사용하지 않는 - 그래서 나는 단지 이스케이프가 있다고 가정 할 수 있습니다 어떤 저장하는 값을 소비하거나 사용하고 있습니다. (예를 들어 값이 HTML에서 사용되고 있기 때문에 사람 저장소 '
또는 "
을 보았습니다 ... HTML이 아닌 목적으로 사용되는 데이터의 가능성이있는 경우 노출을 취하고 인코딩하는 것이 좋습니다.)
올바르게 사용하면 이스케이프 문자가 데이터베이스에 저장되지 않습니다. mysql에 데이터를 전달할 때만 사용된다. –
ANSI SQL 이스케이프 문자는 '
이지만 NO_BACKSLASH_ESCAPES
이 활성화되지 않은 경우 MySQL도 \
을 이스케이프 처리 할 수 있습니다.
char를 이스케이프 처리해도 실제로 char가 하나 더 사용되지 않습니다. 파서가 입력을 올바르게 읽는 것만 가능합니다.
예를 들어, '1234567890'또는 '12345678''0'을 삽입하면 둘 다 같은 양의 공간을 차지하며 바운드 필드가 오버플로되지 않습니다.
MySQL manual에는 이에 대한 완벽한 장이 있습니다.
저장된 값에는 백 슬래시가 포함되면 안됩니다. 당신은 어떻게 든 당신의 데이터를 두 번 이스케이프하고있다. 프로세스가 같이하는 방법의
매우 단순한 의사는 :
data = "Let's party!"
data = escape(data) # Let\'s party
save(data)
## The database ignores the single quote, since it is escaped with a backslash
## but then removes the slash before storing data
read(data) # Let's party
저장 데이터를 배치하고, 준비된 쿼리를 사용하지 않는, 당신은 위의 표시로 정확히 한 번만 데이터를 탈출해야합니다.
쿼리의 문자열 리터럴 부분에 준비된 쿼리를 사용하는 경우 데이터를 이스케이프하면 안되므로 문제가 발생합니다.
$db = new mysqli('localhost', 'my_user', 'my_password', 'world');
$sql = 'INSERT INTO `blah` (field1,field2) VALUES (?,?)';
$query = $db->prepare($sql);
$query->bind_parms('ss',$no_escaping,$needed_here);
$query->execute();
편집 : 준비된 쿼리를 사용하고 있습니까?
당신이 있다면, 나는이 here.에 대한 수업을 함께 자수했습니다.
문자열 이스케이프와 이스케이프 문자의 작동 방식은 종종 혼란 스럽습니다.
이$string = "My \"string\" is cool.";
변수 $string
어떤 슬래시 포함되어 있지 않습니다 예를 들어,이 PHP 코드를 부여.필자가 작성한 코드에는 슬래시가 있지만 파서의 도움을 위해서만 존재하며 다음 따옴표로 문자열을 끝내면 안된다.
데이터베이스에 대해서도 동일하게 적용되지만, 많은 사람들이 방문하는 곳입니다. 왜냐하면 2 파서, 첫째로 프로그래밍 언어 (예 : PHP)가 읽은 문자열을 작성한 다음 데이터베이스가 문자열을 작성하기 때문입니다. PHP는이를 읽고이 될 문자열을 해석
$sql = "INSERT INTO myTable VALUES (\"\\\"\\\"\")";
예를 들어, 데이터베이스에 ""
(이 인용 부호가 아닌 빈 문자열) 문자열을 삽입하는, 당신은이처럼 보였다 일부 코드를 필요 했어 :
INSERT INTO myTable VALUES ("\"\"")
그리고 MySQL은 그것을 읽고으로 삽입 값을 해석 :
""
(두 따옴표)를
이 모든 것이 정렬되었으므로 현재 문제는 무엇입니까? 탈출 한 끈이 있다고하던가요? 그게 문제 야. 마지막 순간에 꼭 필요한대로 문자열 만 이스케이프해야합니다. 저장하려는 데이터가 5 o'clock
경우, 다음 문자열 값은 당신이 그것을 탈출해야 할 때 5 o'clock
, 하지5 o\'clock
당신은 SQL 문에 그 값을 삽입하는 그 순간의해야합니다.
$myString = '5 o\'clock'; // value is: 5 o'clock
$sql = sprintf(
"INSERT INTO myTable VALUES ('%s')",
mysql_real_escape_string($myString) // 5 o\'clock
);
echo $sql; // INSERT INTO myTable VALUES ('5 o\'clock');
- 1. Java csv 파일의 저장소 이스케이프 문자열
- 2. MySQL에서 이스케이프 된 문자열 문제
- 3. PHP 및 MySQL 입력 문자열 이스케이프 문제
- 4. C++ Mysql 실제 이스케이프 문자열 문제
- 5. SQL 문자열 이스케이프 질문
- 6. MySQL의 실제 이스케이프 문자열 오류가
- 7. 이스케이프 된 문자 제거
- 8. SBJson 및 이스케이프 문자열.
- 9. 파이썬으로 문자열 이스케이프 mysql.connector
- 10. 이스케이프 그대로 문자열 리터럴
- 11. 문자열 이스케이프 문제가 발생했습니다.
- 12. Python에서 정규식 문자열 이스케이프
- 13. URL 이스케이프 된 문자로 base64 인코딩 된 문자열
- 14. . NET에서 MySQL 문자 이스케이프
- 15. 보기에서 JavaScript 문자열 리터럴 이스케이프
- 16. 자바 스크립트의 magento 이스케이프 문자열
- 17. 검색 가능한 정적 문자열 저장소
- 18. 안드로이드 실제 이스케이프 문자열 sqlite
- 19. mysql 문자가 작은 따옴표로 이스케이프
- 20. 내가 다른 일 문자열 이스케이프 라이브러리의 일부 코드를 통해보고 된
- 21. PHP에서 이스케이프 된 쿼리 문자열 값을 재사용하려면 어떻게해야합니까?
- 22. Boost :: Spirit을 사용하여 이스케이프 된 문자열 구문 분석
- 23. apache : 쿼리 문자열 (URL)의 이스케이프 처리 된 움라우트가 403
- 24. 변환 된 문자열에서 이스케이프 시퀀스없이 문자열 작성기를 문자열로 변환하는 방법
- 25. Actionscript에 의해 이스케이프 처리 된 Java 디코드 문자열
- 26. 어떻게 백 슬래시로 이스케이프 된 문자열을 파이썬에서 이스케이프 해제합니까?
- 27. 음속 간단한 저장소 문자열 길이
- 28. Mysql 테이블의 수정 된 문자열 검색
- 29. 이스케이프 된 견적을 xml에서 이스케이프 된 견적으로 읽습니다.
- 30. Groovy : 문자열 안에 중괄호를 이스케이프 처리합니다.
이중 탈출이 의심됩니다. 나는이 문제를 한번도 갖지 못했다. –