2012-05-12 1 views
0

지난 며칠 동안 문제를 해결하고 문제 해결 방법에 대한 팁이 필요합니다.SQL 쿼리 + 특수 문자 ä, ö, ü, ø 등

나는 $ 값이 ä ü ö ø

같은 데이터베이스의 데이터 정렬을 문자가 포함되지 않은 경우 그것은 잘 작동이

mysql_real_escape_string($value); 
    $sql_first = "SELECT `user_id` FROM `usermeta` WHERE `meta_value` = '".$value."' 


처럼 보이는 SQL 쿼리를 utf8_general_ci

되어 있습니다 php conv() 함수를 사용하여 다양한 조합을 시도했지만 제대로 작동하지 않습니다.

$value을 UTF-8로 변환해야합니다. 올바른 방향으로 가고 있습니까?

+0

특수 문자가 없어도 작동하지 않습니다 :이 '$ value'을 상상해보십시오 :''Robert'; 드롭 테이블 usermeta - "'. ** 시도해 보지 말고, 어떤 일이 일어날 지 상상해보십시오. ** 이것은 [Bobby Tables] (http://xkcd.com/327/) 예제로, 일반적으로 SQL Interjection 공격으로 알려져 있습니다. – dasblinkenlight

+0

SQL * interjection * attack : * Oh shit! * :-) –

+0

질문에'sql-injection'으로 태그를 붙여야합니다.그렇게하면 PHP를 사용하고 있음을 알 수 있습니다. –

답변

1

준비된 명령문을 사용하면 데이터베이스 드라이버가 모든 것을 처리하므로 SQL 주입 공격에 보너스가 적용되지 않습니다.

는 참조 http://php.net/manual/fr/mysqli.prepare.php

+0

여전히 작동하지 않습니다. 바인드 기능을 사용하는 방법은 무엇입니까? '$ stmt-> bind_param ("s", $ value);' – Backslash

0

내가 this 링크에서 utf8_unicode_ci 정렬

을 시도 말할 것입니다 :

  1. utf8_unicode_ci 예를 들어, 소위 확장 및 합자를 지원합니다 있습니다

    주요 차이점 : 독일어 문자 ß (U + 00DF 문자 SHARP S)는 "ss"01 근처에서 정렬됩니다.레터 (U + 0152 라틴 대문자 OE)는 "OE"근처에서 분류됩니다. 확장/합자를 지원하지 않습니다

utf8_general_ci, 그것은 잘못된 순서로 때로는 모든 단일 문자로 문자 및 정렬됩니다.

  1. utf8_unicode_ci는 일반적으로보다 정확한 모든 스크립트입니다. 예 : 키릴 문자 차단 : utf8_unicode_ci는 러시아어, 불가리아어, 벨로루시 어, 마케도니아 어, 세르비아어 및 우크라이나어로 된 모든 언어에서 사용할 수 있습니다. utf8_general_ci는 키릴 문자의 러시아어 및 불가리아어 하위 집합에만 적합합니다. 벨로루시 어, 마케도니아 어, 세르비아어 및 우크라이나어 에서 사용 된 추가 문자는 잘 분류되지 않았습니다.

utf8_unicode_ci의 단점은 약간 utf8_general_ci보다 느리다는 것입니다.

그래서 더 나은 정렬 순서가 필요할 때 - utf8_unicode_ci, 을 사용하고 성능에 완전히 관심이있을 때 - utf8_general_ci를 사용하십시오.