Esta consulta parece funcionar perfectamente en mi máquina anterior. Sin embargo, en mi nueva máquina con MySQL 5.7.14 y PHP 5.6.25 parece arrojar un error:
Error grave: excepción no detectada 'PDOException' con el mensaje 'SQLSTATE[42000]: error de sintaxis o infracción de acceso: 1140 En una consulta agregada sin GROUP BY, la expresión n.° 1 de la lista SELECT contiene la columna no agregada 'pixel_perfect.users.id'; esto es incompatible con sql_mode=only_full_group_by' en C:\wamp64\www
Así es como se ve mi consulta:
$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();¿Por qué recibo este error ahora y qué debo hacer para resolverlo sin problemas?
Se realizó un cambio en la versión 5.7-ish donde ahora, de forma predeterminada, rechazará las consultas en las que agrega usando una función ( sum , avg , max , etc.) en la cláusula SELECT y fallará al colocar los campos no agregados en la cláusula GROUP BY . Este comportamiento es parte integral de todos los demás RDBMS y MySQL finalmente se está incorporando.
Tienes dos opciones:
La opción 2 sería algo como:
SELECT id, password, COUNT(id) AS count FROM users WHERE email = :email GROUP BY id, password LIMIT 1Es un poco tarde, pero me encontré con este error.
Este comando puede ser útil para cualquier otra persona que se encuentre con el mismo error.
mysql > SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));Se puede encontrar más información sobre esto en Table Plus y otros enlaces citados anteriormente por JNevill .
Espero que ayude a alguien más.
La respuesta más fácil, en config/database.php, asegúrese de establecer estricto => verdadero a estricto => falso para la configuración de mysql.
Esto permitirá consultas menos que estrictas a costa de la seguridad para llamadas sql normales bien formadas (aún no 100% seguras), pero permitirá el uso de otras llamadas sql que podrían no ser seguras si se escriben incorrectamente.