나는 이상한 문제가있어서 지금 당장 나를 괴롭 히고 해결할 수 없다. 테스트 목적으로 데이터베이스에서 결과를 얻는 데 사용되는 매개 변수가있는 URL을 만듭니다. 그것은 대부분 잘 작동하지만 "ß"와 같은 특수 문자로 고생하는 것 같습니다. 여기 PHP/MYSQL 쿼리 결과가 잘못되었습니다. 인코딩이 잘못 되었습니까?
는 사용자가 urlencoded를하는 URL의 예입니다 :https://www.testurl.com/login.php?user=bu%DFmann (BU % DFmann = 과전압, 전류, 온도)
그리고 이것은 내 PHP 스크립트의 일부입니다
$user = new User;
$loginOrEmail = $this->_helper->get_request_value("user", array("get"));
if ($user->check_user_is_valid($loginOrEmail)) {
.........
이가 check_user_is_valid
방법 :
$sql = "SELECT * FROM user WHERE (email='" . mysql_real_escape_string($loginOrEmail) . "' OR login='" . mysql_real_escape_string($loginOrEmail) . "') AND activated = 'yes'";
$result = $database->query($sql);
if (mysql_num_rows($result) < 1) {
return false;
}
return true;
이제이 것 같습니다. 위의 URL에 대해 false를 반환합니다. (print_r 또는 var_dump와 함께) 쿼리를 인쇄하면 쿼리가 정상적으로 처리됩니다.
SELECT * FROM user WHERE (email='bußmann' OR login='bußmann') AND activated = 'yes'
사실. 이 쿼리를 복사하여 phpMyAdmin에 붙여넣고 실행하면 예상했던 행이 생성됩니다. 여기 무슨 일 이니? 문제가 어디에 있습니까? 다른 모든 이름에도 적용되기 때문에 잘못된 인코딩이나 무언가와 관련이 있다고 확신합니다.
데이터베이스에 연결 한 후 이미 mysql_set_charset('utf-8', $connection);
이 있습니다.
참고 : 저는 이것이 안전하지도 않고 최선의 방법이라고도 알고 있습니다. 테스트 용입니다.
mysql_set_charset ('utf-8', $)이 아닌 'mysql_set_charset ('utf8 ', $ connection) 연결);'하이픈을 제거하고 다시 시도하십시오. –
오, 젠장. Mistyped :(그것은 이미 utf8입니다.하지만 뭔가 다른 것으로 나타났습니다. 내 브라우저 인코딩을 ISO-8859-1로 설정 한 경우에만 인쇄되는 SQL 쿼리가 UTF-8로 잘못 표시됩니다. – puelo
또는, $ result = $ database-> query ($ sql); 앞에'$ user-> new user;'$ database-> query ('set name utf8'); –