GROUP BY가 없는 집계 쿼리
이 쿼리는 내 오래된 기계에서 완벽하게 작동하는 것 같습니다.그러나 MySQL 5.7.14 및 PHP 5.6.25가 있는 새 컴퓨터에서는 다음과 같은 오류가 발생합니다.
치명적 오류:'SQLSTATE[42000]' 메시지와 함께 탐지되지 않은 예외 'PDOException':구문 오류 또는 액세스 위반: 1140 GROUP BY가 없는 집계 쿼리에서 SELECT 목록의 식 #1에 집계되지 않은 열 'pixel_perfect.users.id '이 포함되어 있습니다. 이 열은 C:\wamp64\wwww의 sql_mode=only_full_group_by'와 호환되지 않습니다.
내 쿼리는 다음과 같습니다.
$sql="SELECT id, password, COUNT(id) AS count FROM users WHERE email = :email LIMIT 1";
$stmt=$db->prepare($sql);
$stmt->bindValue(':email', $email);
$stmt->execute();
지금 이 오류가 발생하는 이유는 무엇이며 이를 해결하려면 어떻게 해야 합니까?
버전 5.7.5에서는 기본적으로 함수를 사용하여 집계하는 쿼리를 거부합니다(sum
,avg
,max
, 등)에서SELECT
clause and failure to put the non-certified fields in theGROUP BY
절이러한 동작은 다른 모든 RDBMS에 영향을 미치며 MySQL은 마침내 실행에 옮겨지고 있습니다.
두 가지 옵션이 있습니다.
- MySQL 설정을 기본값으로 이전 동작으로 변경하여 이와 같이 그다지 크지 않은 쿼리를 허용할 수 있습니다.정보는 여기서 찾을 수 있습니다.
- 쿼리를 수정할 수 있습니다.
옵션 2는 다음과 같습니다.
SELECT id, password, COUNT(id) AS count FROM users WHERE email = :email GROUP BY id, password LIMIT 1
또한 GROUP BY 절에서 집계되지 않은 열이 단일 값(WHERE 절의 필터 등)으로 제한된 경우 5.7.5 이상 버전에서는 집계되지 않은 열을 제외할 수 있습니다.이 허용된 예외의 예는 위 링크를 참조하십시오.
조금 늦었지만 제가 방금 이 오류를 범했습니다.
이 명령은 동일한 오류가 발생한 다른 사용자에게 유용할 수 있습니다.
mysql > SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
이에 대한 자세한 내용은 테이블 플러스 및 위에서 인용한 JNevill의 기타 링크에서 확인할 수 있습니다.
다른 사람에게 도움이 되길 바랍니다.
구성/데이터베이스에서 가장 쉬운 답변입니다.php는 mysql 설정에 대해 strict => true를 strict => false로 설정해야 합니다.
이렇게 하면 정상적인 형식의 sql 호출에 대해 보안 비용으로 엄격하지 않은 쿼리를 허용할 수 있지만(여전히 100% 안전하지 않음), 부적절하게 작성된 경우 안전하지 않을 수 있는 다른 sql 호출을 사용할 수 있습니다.
SQL 모드를 기본값으로 변경합니다.오류 없이 실행됩니다. SQL 모드는 쿼리의 구문을 정의합니다.ONLY_FLUY_GROUPBY를 사용하는 경우 모든 Aggregator 함수에 대해 group by로 쿼리를 작성해야 합니다.
언급URL : https://stackoverflow.com/questions/43481869/aggregated-query-without-group-by
'programing' 카테고리의 다른 글
명령줄에서 ssh를 통해 원격 시스템에서 MySQL 쿼리 실행 (0) | 2023.09.07 |
---|---|
클릭 시 부트스트랩 드롭다운을 열어 둡니다. (0) | 2023.09.07 |
Spring의 @Value 주석에 여러 속성 이름을 지정할 수 있습니까? (0) | 2023.09.07 |
MySQL - 사용자의 선택에 따라 열 '이름'을 선택합니다. 열 'id'와 'parent'의 행이 동일한 경우 (0) | 2023.09.07 |
JSF 동적에는 Ajax 요청 사용이 포함됩니다. (0) | 2023.09.07 |