U Forpsi mysql hlásí chybu SQLSTATE[42000]: Syntax error or access violation: 1140
- vanaveno
- Člen | 144
Ahojte, přesunul jsem jeden vytvořený web na forpsi, na mém serveru funguje na Forpsi mi to hlásí chybu
SQLSTATE[42000]: Syntax error or access violation: 1140 In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated column ‚f144687.tags.tagId‘; this is incompatible with sql_mode=only_full_group_by
Pravděpodobně musím vypnout sql_mode=only_full_group_by, měl bych to udělat ještě před přihlášením do databáze.
Děkuji za pomoc
- Mistrfilda
- Člen | 76
Ahoj,
jestli muzu poradit, tak bych spise nez resit, jak only_full_group_by
vypnout, resil to, proc to vubec vznika. Doporucuju si o tom neco precist
(treba https://www.percona.com/…by-sql-mode/ nebo z oficialni
dokumentace https://dev.mysql.com/…ql-mode.html#…), jakym zpusobem to
funguje, protoze to muze mit docela velky vliv na data, ktere dotazy vraci
(chybna data). Pokud si ses naprosto jisty, ze select vraci spravne a vysledky,
tak muzes zkusit pouzit misto globalniho vypnuti, funkci
ANY_VALUE()
– https://dev.mysql.com/…nctions.html#… popripade
jakkekoliv jine agregacni funkce MIN() MAX()
– s tim ale
opravdu opatrne :)
- vanaveno
- Člen | 144
U Forpsi mi poradili toto:
https://support.forpsi.com/…roup-by.aspx
$spojeni = mysqli_connect( „server“, „login“, „heslo“,
„databaze“ );
mysqli_query($spojeni, „SET sql_mode=(SELECT
REPLACE(@@sql_mode,‚ONLY_FULL_GROUP_BY‘,''))“ );
Jak to mám prosím nastavit u připojení databáze. Používám Database Exploerer.
Děkuji
- uestla
- Backer | 799
Tohle by se dalo řešit pomocí $onConnect
eventu, který je
ještě o úroveň výše na Database Core, a volá se po úspěšném
připojení k databázi:
$connection->onConnect[] = static function (Connection $connection): void {
$connection->query('SET sql_mode = (SELECT REPLACE(@@sql_mode, "ONLY_FULL_GROUP_BY", ""));');
};
- vanaveno
- Člen | 144
Díky! Kam to mám vložit?
uestla napsal(a):
Tohle by se dalo řešit pomocí
$onConnect
eventu, který je ještě o úroveň výše na Database Core, a volá se po úspěšném připojení k databázi:$connection->onConnect[] = static function (Connection $connection): void { $connection->query('SET sql_mode = (SELECT REPLACE(@@sql_mode, "ONLY_FULL_GROUP_BY", ""));'); };
- David Grudl
- Nette Core | 8227
sql_mode se dá taky nastavit v konfiguraci:
database:
options:
sqlmode: ...
- uestla
- Backer | 799
vanaveno napsal(a):
Díky! Kam to mám vložit?
Lepší možná bude si ten
SELECT REPLACE(@@sql_mode, "ONLY_FULL_GROUP_BY", "")
pustit
jednorázově na serveru a to, co ti to vrátí, pak použít v configu, jak
psal @DavidGrudl výše.
Tedy např.
database:
options:
sqlmode: 'STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
Díky tomu to pak budeš mít srovnané na všech prostředích.
- Vojtha
- Člen | 37
Ahoj,
zkouším zapnout konfiguraci sqlmode, ale dostávám
Nette\DI\InvalidConfigurationException
Unexpected item 'database › options › sqlmode'. search►
Vypadá to, jako by byl problém někde v jádru nette, zkoušel jsem updatovat přes composer, ale nemělo to efekt. Netušíte někdo, kam se podívat? Díky.