phpmyadmin - count (): Parametr musi być tablicą lub obiektem, który implementuje Countable

466

Przesłałem kopię zapasową do stołu, otwierając stół Widzę to:

Warning in ./libraries/sql.lib.php#601
count(): Parameter must be an array or an object that implements Countable

Backtrace

./libraries/sql.lib.php#2038: PMA_isRememberSortingOrder(array)
./libraries/sql.lib.php#1984: PMA_executeQueryAndGetQueryResponse(
array,
boolean true,
string 'alternativegirls',
string 'tgp_photo',
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
string '',
string './themes/pmahomme/img/',
NULL,
NULL,
NULL,
string 'SELECT * FROM `tgp_photo`',
NULL,
NULL,
)
./sql.php#216: PMA_executeQueryAndSendQueryResponse(
array,
boolean true,
string 'alternativegirls',
string 'tgp_photo',
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
string '',
string './themes/pmahomme/img/',
NULL,
NULL,
NULL,
string 'SELECT * FROM `tgp_photo`',
NULL,
NULL,
)
./index.php#53: include(./sql.php)

Wewnątrz phpMyAdmin ...

PHP to 7.2, serwer to Ubuntu 16.04, zainstalowany wczoraj.

Poszukuję Widziałem, że niektórzy mają ten błąd w kodzie, ale nie znalazłem nikogo, kto otrzymałby go w phpMyAdmin ...

Co powinienem zrobić? Czy to mój błąd? Błąd phpmyadmin? czekać aktualizację? Wrócę do PHP 7.1?

alebal
źródło
9
Ci, którzy stoją przed problemem, jak: if ( count($articles)){..}w CodeIgniter , powinni użyć: if ( count((array)$articles)){..}jak tutaj
fWd82
2
miałem ten problem na phpmyadmin v4.6 i zaktualizowałem do wersji 4.8 zniknął. , wygląda na to, że ma to coś wspólnego z mariadbem 10.3, ponieważ nie miałem tego problemu z mariadbem 10.1 z phpmyadmin 4.6
user889030
W moim przypadku problem pojawił się, gdy zainstalowałem php 7.3, gdy mój phpMyAdmin miał wersję 4.7.1, wróciłem do php 7.0 i działa dobrze lub powinieneś zainstalować wersję phpMyAdmin kompatybilną z php 7.3
vinsa

Odpowiedzi:

872

Edytuj plik /usr/share/phpmyadmin/libraries/sql.lib.phpza pomocą tego polecenia:

sudo nano +613 /usr/share/phpmyadmin/libraries/sql.lib.php

W linii 613 funkcja zliczania zawsze zwraca wartość true, ponieważ po tym czasie nie ma nawiasu zamykającego $analyzed_sql_results['select_expr']. Dokonanie poniższych zamian rozwiązuje ten problem, wówczas będziesz musiał usunąć ostatni nawias zamykający w linii 614, ponieważ jest to teraz dodatkowy nawias.

Zastąpić:

((empty($analyzed_sql_results['select_expr']))
    || (count($analyzed_sql_results['select_expr'] == 1)
        && ($analyzed_sql_results['select_expr'][0] == '*')))

Z:

((empty($analyzed_sql_results['select_expr']))
    || (count($analyzed_sql_results['select_expr']) == 1)
        && ($analyzed_sql_results['select_expr'][0] == '*'))

Uruchom ponownie serwer Apache:

sudo service apache2 restart
Jacky Nguyen
źródło
95
Nie do wiary. Działa na Ubuntu 18.04 z phpmyadmin zainstalowanym przy użyciu apt.
PNDA
7
Pracowałem nad tym, że mogłem wybierać tabele, ale błąd zwrócił się, gdy próbowałem wyeksportować Db
Alperian
30
Jeśli napotkasz podobny problem w eksporcie bazy danych, musisz edytować /usr/share/phpmyadmin/libraries/plugin_interface.lib.php, wiersz 551 od if ($ options! = Null && count ($ options)> 0) {to _if ($ options! = null && count ((array) $ options)> 0) { Może być interesujący dla @alperian i innych
Bernd Schuhmacher

5
To nie działało dla mnie. Mam Error in processing request Error code: 500 Error text: Internal Server Error. Rozwiązanie @Chandra Nakka rozwiązało mój problem.
Jee

472

Najłatwiejsza metoda:

Wystarczy uruchomić poniższy wiersz poleceń w terminalu i wrócić do PhpMyAdmin. Teraz działa dobrze :)

sudo sed -i "s/|\s*\((count(\$analyzed_sql_results\['select_expr'\]\)/| (\1)/g" /usr/share/phpmyadmin/libraries/sql.lib.php

Metoda ręczna:

Otwórz plik sql.lib.php

nano /usr/share/phpmyadmin/libraries/sql.lib.php

Znajdź count($analyzed_sql_results['select_expr']kod w pliku. Możesz to uzyskać na linii ~ 613 . Możesz zobaczyć to poniżej zły kod

|| (count($analyzed_sql_results['select_expr'] == 1)

Po prostu zamień ten zły kod na ten poniżej

|| ((count($analyzed_sql_results['select_expr']) == 1)

Zapisz plik i przejdź do PhpMyAdmin .

Teraz działa dobrze :)


39
Działa w Ubuntu 18.04 na sierpień 2018 :)
Luiz Gonçalves

4
Nie działało dla mnie na Ubuntu 16.04
SP Singh

2
Działa jak urok
Rameez Rami

2
Działa na Ubuntu 19.04. Dzięki
mruk

4
Ciekawą sztuczką w nano jest to, że możesz pisać nano +613 filename, aby przejść bezpośrednio do konkretnej linii.
SteffenNielsen

102

Znalazłem ten PHP 7.2 count () - błąd SYNTAX w sql.lib.php

To doskonale działa w mojej konfiguracji:

Debian 9, 
PHP 7.2.3-1+0~20180306120016.19+stretch~1.gbp81bf3b (cli) (built: Mar  6 2018 12:00:19) ( NTS )

otwarty /usr/share/phpmyadmin/libraries/sql.lib.php

Zmień linię : Przenieś nawias przed ==

|| ( (liczba ($ analiza_sql_results ['select_expr'] ) == 1) && ($ analiza_sql_results ['select_expr'] [0] == '*')))

w

function PMA_isRememberSortingOrder($analyzed_sql_results){

return $GLOBALS['cfg']['RememberSorting']
    && ! ($analyzed_sql_results['is_count']
        || $analyzed_sql_results['is_export']
        || $analyzed_sql_results['is_func']
        || $analyzed_sql_results['is_analyse'])
    && $analyzed_sql_results['select_from']
    && ((empty($analyzed_sql_results['select_expr']))
        || ((count($analyzed_sql_results['select_expr'] ) == 1)
            && ($analyzed_sql_results['select_expr'][0] == '*')))
    && count($analyzed_sql_results['select_tables']) == 1;
 }

W poniższym wierszu będziesz również musiał usunąć jeden z końcowych nawiasów na końcu.
floppes

Dzięki. W jaki sposób taki błąd został wydany dzięki pakietowi instalacyjnemu apt? Po prostu trochę niedorzeczne.
Josh Morel

1
@floppes Nie, to nie jest poprawne. NIE WOLNO usuwać tej nawiasów zamykających. Przetestowałem twoją drogę i to spowodowało server error. Odpowiedź @ loquace powinna zostać zaakceptowana.
Długi

Dziękujemy za przeliterowanie go i użycie pogrubionej czcionki tam, gdzie jest to potrzebne. Ani pierwsza, ani druga odpowiedź nie były dla mnie wystarczająco jasne, ponieważ nie powiedzieli, co robią. Edycja w nano to nie to samo, co gedit lub cokolwiek innego.
logicbloke

71

przetestowany na Debianie, powinien działać na Ubuntu:

1.) Najpierw pobierz najnowszy plik phpMyadmin.

2.) Usuń (wykonaj kopię zapasową) wszystkie poprzednie wersje plików znajdujące się w /usr/share/phpmyadminkatalogu.

3.) Rozpakuj do /usr/share/phpmyadmin/katalogu wszystkie pliki najnowszego phpmyadmin.

4.) Zmodyfikuj plik libraries/vendor_config.phpi zmień linię:

define('CONFIG_DIR', '');

do

define('CONFIG_DIR', '/etc/phpmyadmin/');

i

define('TEMP_DIR', './tmp/');

do

define('TEMP_DIR', '/tmp/');

5.) zrestartuj serwer Apache i gotowe.


3
Działa na Ubuntu 16.04
pjehan

7
Działa na Ubuntu 18.04
Simon Epskamp

5
Ubuntu 18.04, phpMyAdmin 4.8.0.1 - Potrzebowałemmkdir /usr/share/phpmyadmin/tmp; chgrp www-data tmp; chmod g+w tmp;
billynoah

Ubuntu 16.04 po prostu wypakowuje go do /usr/share/phpmyadminpracy. Nie musiałem wykonywać późniejszych kroków.
tushar.dahiwale

@billynoah To samo tutaj z nową instalacją. Utworzyłem katalog tmp, ustawiłem go na 777, zrestartowałem Apache, wylogowałem się z phpMyAdmin i błędy zniknęły.
JScarry

38

Edytuj plik :'/usr/share/phpmyadmin/libraries/sql.lib.php'

Zamień :(count($analyzed_sql_results['select_expr'] == 1)

Z : (count($analyzed_sql_results['select_expr']) == 1

to zadziałało dla mnie


Działa to dla mnie na podstawie warunku, że naprawiłem wewnętrzny błąd 500 został rozwiązany, ale stary problem z błędem „phpmyadmin - count (): Parametr musi być tablicą lub obiekt, który implementuje Countable” nie został rozwiązany.
shashik493

wydaje mi się, że to działa, ale czy ktoś wie, dlaczego tak się stało? Mój phpmyadmin działał dobrze, a potem nagle się zalogowałem i wydaje się, że ma ten problem? Ubuntu 18.04.2 LTS
wheelsmanx

Działa na UBuntu 18.04, wing Nginx, php 7.2
PHPer

34
Works on UBUNTU 18.04 


Edit file: '/usr/share/phpmyadmin/libraries/sql.lib.php'
Replace: (count($analyzed_sql_results['select_expr'] == 1)
With:  ((count($analyzed_sql_results['select_expr']) == 1)

Restart the server
sudo service apache2 restart

To zadziałało dla mnie 18.04, dzięki! Nie trzeba nawet restartować serwera - PHP jest interpretowane jako „na żywo”.
Jelle Veraa

@JelleVeraa, jesteś specjalnym przypadkiem hehehe;)
kaleem

32

Jeśli ktoś ma podobny błąd na stronie eksportu DB (miałem ten problem w Ubuntu 18.04), to zastąp wiersz 551 w pliku /usr/share/phpmyadmin/libraries/plugin_interface.lib.phpkodem

if ($options != null && (is_array($options) || $options instanceof Countable) && count($options) > 0) {

To mi również pomogło, ale musiałem odpowiedzieć zarówno na to, jak i na to. Ubuntu 18.04
Karuhanga

2
To działało, aby pozbyć się komunikatów o błędach, ale myślę, że to wtedy całkowicie pomija instrukcję if i nie otrzymuję niczego w eksporcie bazy danych (z kilkoma błędami wyświetlanymi na dole po odświeżeniu strony po zakończeniu bazy danych eksport z niewielkim śladem pliku)
Warren Wang

Pocałunek, pocałunek, kocham cię.
Noah Krasser,

1
W Debianie 9 zamień wiersz 551: na if ($options != null && count($options) > 0) {: if ($options != null) {wtedy możesz eksportować
BitDEVil2K16

To jedyny, który pracował 18.04
TeT Psy


24

Wykonaj następujące kroki na ubuntu-18.04:

Krok 1) zlokalizujsql.lib.php

Wyświetli się coś takiego:

/usr/share/phpmyadmin/libraries/sql.lib.php

Krok 2) Otwórz terminal (Alt t) i napisz:

sudo /usr/sbin/pma-configure

Krok 3)sudo gedit /usr/share/phpmyadmin/libraries/sql.lib.php i wyszukaj poniżej funkcję:

 

    funkcja PMA_isRememberSortingOrder ($ Analysis_sql_results)
     {
        return $ GLOBALS ['cfg'] ['RememberSorting']
            &&! ($ Analysis_sql_results ['is_count']
                || $ Analysis_sql_results ['is_export']
                || $ Analysis_sql_results ['is_func']
                || $ Analysis_sql_results ['is_analyse'])
            && $ Analysis_sql_results ['select_from']
            && ((pusty ($ analy_sql_results ['select_expr']))
                || (liczba ($ analizowane_sql_results ['select_expr'] == 1)
                    && ($ Analysis_sql_results ['select_expr'] [0] == '*')))
            && count ($ Analysis_sql_results ['select_tables']) == 1;
     }

Krok 4) Zamień powyższą funkcję na:

     funkcja PMA_isRememberSortingOrder ($ Analysis_sql_results)
     {
        return $ GLOBALS ['cfg'] ['RememberSorting']
            &&! ($ Analysis_sql_results ['is_count']
                || $ Analysis_sql_results ['is_export']
                || $ Analysis_sql_results ['is_func']
                || $ Analysis_sql_results ['is_analyse'])
            && $ Analysis_sql_results ['select_from']
            && ((pusty ($ analy_sql_results ['select_expr']))
                || (liczba ($ analiza_sql_results ['select_expr']) == 1)
                    && ($ Analysis_sql_results ['select_expr'] [0] == '*'))
            && count ($ Analysis_sql_results ['select_tables']) == 1;
     }

Krok 4) Zapisz i zamknij plik oraz poniższe polecenie na terminalu

sudo /usr/sbin/pma-secure

Krok 5) sudo service mysql reload

Krok 6) sudo service apache2 reload

To działa dla mnie .. Goodluck

Oprogramowanie Neoark
Przeładowanie MySQL i apache nie jest konieczne.
Tacsiazuma
Otrzymałem ten komunikat po modyfikacji pliku: "- root @ Lalla: ~ # / usr / sbin / pma-secure - Zabezpieczanie instalacji phpMyAdmin ... - Skrypt instalacyjny nie będzie mógł zapisać konfiguracji. - root @ Lalla: ~ # „
cl-r
Po prostu dodałeś klamrę. Ale dzięki.
Usunąłem
Mam zainstalowanego xamppa na moim komputerze Mac, nie mogłem znaleźć folderu / usr / share / phpmyadmin, a zatem „/usr/share/phpmyadmin/libraries/sql.lib.php” to nie jest dla mnie, czy możesz w tym pomóc?
Saurabh Verma
Ta odpowiedź była niezwykle przydatna! Rozwiązałem problem dla mnie! Dzięki! PS: Generatory Blowfish można znaleźć w Internecie.
Lucuc
I rozwiązanie pod tym linkiem: devanswers.co/manually-upgrade-phpmyadmin podąża za podobnym planem, z tą różnicą, że zastępuje kroki
rozdmuchiwaczy
Jest to znacznie lepsze rozwiązanie w porównaniu do edycji plików konfiguracyjnych starszych wersji.
andromeda,
Dzięki! w tej linii popełniłem błąd na końcu, gdzie miałem 3 nawiasy zamykające, potrzebowałem tylko 2 nawiasów zamykających && ($ Analysis_sql_results ['select_expr'] [0] == '*')). Pracowałem nad phpmyadmin 4.6, php 7.2.10, ubuntu
18.4.1
2
Rozwiązuje problem w systemie Ubuntu 18.04 LTS. Powinna być zaakceptowana odpowiedź.
bgaze
To zadziałało dla mnie .. Nie trzeba uaktualniać mysql ani nic takiego ... Dzięki @ole
Nitin Vaghani
1
W wierszu 613 zmień na|| (count($analyzed_sql_results['select_expr']) == 1
tnductam
Brakowało nawiasu, aby zamknąć wywołanie funkcji || (liczba ($ analiza_sql_results ['select_expr']) == 1 jest poprawnym stwierdzeniem
Ruberandinda Patience
Ścieżka do pliku to „/usr/share/phpmyadmin/libraries/sql.lib.php” dla tych, którzy nie wiedzą, gdzie ją znaleźć.
Ali Imran,
Zmieniłbym kolejność 1 i 2, a przed wget zrobiłbym cd / tmp, ale poza tym, świetnie, dziękuję.
Chris
To działa dla mnie, dzięki za proste rozwiązanie!
uestcfei
Mam zainstalowanego xamppa na moim komputerze Mac, nie mogłem znaleźć folderu / usr / share / phpmyadmin, a zatem „/usr/share/phpmyadmin/libraries/sql.lib.php” to nie jest dla mnie, czy możesz w tym pomóc?
Saurabh Verma
@SaurabhVerma przeszukuje plik w poszukiwaniu sql.lib.php lub folderu phpmyadmin - jeśli masz phpmyadmin, musi on być gdzieś zainstalowany
jave.web
22

otwórz ten plik: „/usr/share/phpmyadmin/libraries/sql.lib.php”

sudo nano /usr/share/phpmyadmin/libraries/sql.lib.php

naciśnij kombinację klawiszy Ctrl + W, aby wyszukać (zliczaj ($ analiza_sql_results ['select_expr'] == 1)

Find: count($analyzed_sql_results['select_expr'] == 1)

Replace With:  (count($analyzed_sql_results['select_expr']) == 1)

Uruchom ponownie serwer

 sudo service apache2 restart

ponadto, jeśli nadal napotykasz ten sam problem, wykonaj następujące czynności.

otwórz ten plik /usr/share/phpmyadmin/libraries/plugin_interface.lib.php

sudo nano /usr/share/phpmyadmin/libraries/plugin_interface.lib.php

Znajdź: if ($ options! = Null && count ($ options)> 0) {

Ctrl+w : if ($options != null && count($options) > 0) {

zamień na następujący kod

if ($options != null && count((array)$options) > 0) {

teraz zapisz i zrestartuj serwer

sudo /etc/init.d/apache2 restart
Kundan Roy
źródło
Po prostu dodałeś klamrę. Ale dzięki.
Usunąłem
Mam zainstalowanego xamppa na moim komputerze Mac, nie mogłem znaleźć folderu / usr / share / phpmyadmin, a zatem „/usr/share/phpmyadmin/libraries/sql.lib.php” to nie jest dla mnie, czy możesz w tym pomóc?
Saurabh Verma
18

Myślę, że najlepszą opcją jest aktualizacja Phpmyadmin do wersji, która ma już to naprawione.

Dopóki nie zostanie opublikowany jako deb, możesz to zrobić jak w odpowiedzi @ crimson-501, którą skopiuję poniżej:

  • Pierwszym krokiem jest zainstalowanie PMA (phpMyAdmin) z oficjalnego repo Ubuntu: apt-get install phpmyadmin.
  • Następnie cd do katalogu / usr zakładowego: cd /usr/share.
  • Po trzecie, usuń katalog phpMyAdmin: rm -rf phpmyadmin.
  • Teraz musimy pobrać najnowszą wersję PMA na nasz system (pamiętaj, że musi pan wget: apt-get install wget): wget -P /usr/share/ "https://files.phpmyadmin.net/phpMyAdmin/4.9.4/phpMyAdmin-4.9.4-english.zip" Pozwól mi wyjaśnić argumenty tej komendy, -P określa ścieżkę i „link.zip” jest obecnie (17/07/18 ) najnowsza wersja PMA. Te linki można znaleźć TUTAJ .
  • W tym następnym kroku trzeba rozpakować ( apt-get install unzip) unzip phpMyAdmin-4.9.4-english.zip. Właśnie rozpakowaliśmy PMA, teraz przeniesiemy go do jego ostatecznego domu.
  • Użyjmy polecenia cp(kopiuj), aby przenieść nasze pliki! Zauważ, że musimy dodać -rargument, ponieważ jest to folder. cp -r phpMyAdmin-4.9.4-english phpmyadmin.
  • Teraz nadszedł czas, aby oczyścić: rm -rf phpMyAdmin-4.9.4-english.

Czytaj dalej!

Możesz teraz zauważyć dwa błędy po zalogowaniu się do PMA.

the configuration file now needs a secret passphrase (blowfish_secret). phpmyadmin
The $cfg['TempDir'] (./tmp/) is not accessible. phpMyAdmin is not able to cache templates and will be slow because of this.

Problemy te można jednak stosunkowo łatwo naprawić. W przypadku pierwszego wydania wystarczy pobrać edytor i edytować, /usr/share/phpmyadmin/config.inc.phpale jest problem, usunęliśmy go! W porządku, wszystko co musisz zrobić to: cd /usr/share/phpmyadmin& cp config.sample.inc.php config.inc.php.

Przykład phpMyAdmin Blowfish Secret Variable Entry:

/*
 * This is needed for cookie based authentication to encrypt password in
 * cookie
 */
$cfg['blowfish_secret'] = '{^QP+-(3mlHy+Gd~FE3mN{gIATs^1lX+T=KVYv{ubK*U0V'; 
/* YOU MUST FILL IN THIS FOR COOKIE AUTH! */

Teraz zapisz i zamknij plik.

  • Teraz stworzymy katalog tmp dla PMA: mkdir tmp& chown -R www-data:www-data /usr/share/phpmyadmin/tmp. Ostatnie polecenie pozwala serwerowi Apache posiadać katalog tmp i edytować jego zawartość.
PhoneixS
źródło
Ta odpowiedź była niezwykle przydatna! Rozwiązałem problem dla mnie! Dzięki! PS: Generatory Blowfish można znaleźć w Internecie.
Lucuc
I rozwiązanie pod tym linkiem: devanswers.co/manually-upgrade-phpmyadmin podąża za podobnym planem, z tą różnicą, że zastępuje kroki
rozdmuchiwaczy
Jest to znacznie lepsze rozwiązanie w porównaniu do edycji plików konfiguracyjnych starszych wersji.
andromeda,
17

Spróbuj zastąpić tę funkcję w pliku: /usr/share/phpmyadmin/libraries/sql.lib.php

function PMA_isRememberSortingOrder($analyzed_sql_results)
{
    return $GLOBALS['cfg']['RememberSorting']
        && ! ($analyzed_sql_results['is_count']
            || $analyzed_sql_results['is_export']
            || $analyzed_sql_results['is_func']
            || $analyzed_sql_results['is_analyse'])
        && $analyzed_sql_results['select_from']
        && ((empty($analyzed_sql_results['select_expr']))
            || (count($analyzed_sql_results['select_expr']) == 1)
                && ($analyzed_sql_results['select_expr'][0] == '*'))
        && count($analyzed_sql_results['select_tables']) == 1;
}
Oleksandr P.
źródło
Dzięki! w tej linii popełniłem błąd na końcu, gdzie miałem 3 nawiasy zamykające, potrzebowałem tylko 2 nawiasów zamykających && ($ Analysis_sql_results ['select_expr'] [0] == '*')). Pracowałem nad phpmyadmin 4.6, php 7.2.10, ubuntu
18.4.1
17

Ubuntu 18.04 LTS

To były kroki, które działały dla mnie. Ogromne podziękowania dla Williama Desportesa za zapewnienie automatycznych aktualizacji na ich Ubuntu PPA.

Krok 1 ( z posta Williama Desportesa )
$sudo add-apt-repository ppa:phpmyadmin/ppa

Krok 2
$sudo apt-get --with-new-pkgs upgrade

Krok 3
$sudo service mysql restart

Jeśli masz problemy z ponownym uruchomieniem mysql, możesz również uruchomić ponownie w następującej kolejności
$ sudo service mysql stop;
$sudo service mysql start;

C13L0
źródło
2
Rozwiązuje problem w systemie Ubuntu 18.04 LTS. Powinna być zaakceptowana odpowiedź.
bgaze
15

Ubuntu 18.10 (grudzień 2018)

Wiersz 613, 614, 615, zamień na:

        || count($analyzed_sql_results['select_expr']) == 1
            && ($analyzed_sql_results['select_expr'][0] == '*'))
    && count($analyzed_sql_results['select_tables']) == 1;
olealgo
źródło
To zadziałało dla mnie .. Nie trzeba uaktualniać mysql ani nic takiego ... Dzięki @ole
Nitin Vaghani
15

Pracuj dla mnie .. Ubuntu 18.04

sudo nano /usr/share/phpmyadmin/libraries/sql.lib.php

Znajdź count($analyzed_sql_results['select_expr']kod w pliku. Możesz to uzyskać na linii ~ 613.

|| (count($analyzed_sql_results['select_expr'] == 1)

Wystarczy zastąpić kodem:

|| ((count($analyzed_sql_results['select_expr']) == 1)

Zapisz plik i załaduj ponownie PhpMyAdmin.

Gotowy!!!

Ucup Timposu
źródło
1
W wierszu 613 zmień na|| (count($analyzed_sql_results['select_expr']) == 1
tnductam
11

W mojej wersji phpmyadmin (4.6.6deb5) znalazłem wiersz 613 i zdałem sobie sprawę, że nawiasy count () nie zostały poprawnie zamknięte. Aby to naprawić tymczasowo do następnej wersji, po prostu zmień:

|| (count($analyzed_sql_results['select_expr'] == 1)

do:

|| (count($analyzed_sql_results['select_expr']) == 1
JT
źródło
Brakowało nawiasu, aby zamknąć wywołanie funkcji || (liczba ($ analiza_sql_results ['select_expr']) == 1 jest poprawnym stwierdzeniem
Ruberandinda Patience
Ścieżka do pliku to „/usr/share/phpmyadmin/libraries/sql.lib.php” dla tych, którzy nie wiedzą, gdzie ją znaleźć.
Ali Imran,
9

Zostało to naprawione w późniejszych wersjach PHPMyAdmin. Repozytoria oprogramowania Ubuntu dla Ubuntu 18.04.2 zawierają wersję 4.6.6.5, a obecnie są w wersji 4.9.0.1. Aktualizacja instalacji PHPMyAdmin rozwiąże ten problem, ale może okazać się bardziej ryzykowna niż edycja tego wiersza kodu. Oto jak to zrobiłem na moim Ubuntu Server. Kroki są zasadniczo takie same (z inną ścieżką) dla wszystkich systemów operacyjnych.

  1. Pobierz PHPMyAdmin .
wget https://files.phpmyadmin.net/phpMyAdmin/4.9.0.1/phpMyAdmin-4.9.0.1-all-languages.zip
unzip phpMyAdmin-4.9.0.1-all-languages.zip
  1. Wykonaj kopię zapasową starej instalacji PHPMyAdmin.
cp -r /usr/share/phpmyadmin ~/phpmyadmin-backup
  1. Upuść nowego PHPMyAdmin na starym PHPMyAdmin
cd phpMyAdmin-4.9.0.1-all-languages
rm -r /usr/share/phpmyadmin/doc/html
cp -R * /usr/share/phpmyadmin/

Sprawdź, czy to działa. Jeśli nie, dobrze ... Masz kopię zapasową, więc przywróć ją i ręcznie edytuj wadliwą linię. Z własnego doświadczenia wynika, że ​​po wykonaniu tej czynności wersja 4.6.6.5 była nie tylko pełna błędów, ale także niezwykle powolna w porównaniu z nową wersją 4.9.0.1. Zwiększenie prędkości było czystą magią dla czegoś, co uważałem za jakość „WordPress”.

NatoBoram
źródło
Zmieniłbym kolejność 1 i 2, a przed wget zrobiłbym cd / tmp, ale poza tym, świetnie, dziękuję.
Chris
To działa dla mnie, dzięki za proste rozwiązanie!
uestcfei
8

Działa na UBUNTU 16.04.3 Po prostu otwórz

usr / share / libraries / sql.lib.php

modyfikować

|| (count($analyzed_sql_results['select_expr'] == 1)

Do

|| ((count($analyzed_sql_results['select_expr']) == 1)

ibrahim.suez
źródło
5

Zaktualizuj do phpMyAdmin 4.8.3. rozwiązuje to problemy ze zgodnością PHP 7.2

HUGO POLANCO
źródło
5

|| ((count($analyzed_sql_results['select_expr']) == 1

To właśnie zmieniłem w linii 614 i phpmyadmin działa bez żadnego błędu. Potrzebuję jednego (przed obliczeniem, a drugiego )przedtem ==. Otóż ​​to.

Bikram Nath
źródło
4

Edytuj plik „/usr/share/phpmyadmin/libraries/sql.lib.php” Zamień: (wykonaj kopię zapasową)

"|| (count($analyzed_sql_results['select_expr'] == 1) 
&&($analyzed_sql_results['select_expr'][0] == '*'))) 
&& count($analyzed_sql_results['select_tables']) == 1;"

Z:

"|| (count($analyzed_sql_results['select_expr']) == 1) 
&& ($analyzed_sql_results['select_expr'][0] == '*') 
&& (count($analyzed_sql_results['select_tables']) == 1));"
Roland Mester
źródło
3

Cześć, absolutnie rozwiąż ten sam problem (import / eksport itd.):

Napraw błąd Phpmyadmin [plugin_interface.lib.php] + Php7.2 + Ubuntu 16.04

więc ... pod Ubuntu 18.04, mysql, php7.2: Terminal:

sudo gedit /usr/share/phpmyadmin/libraries/plugin_interface.lib.php

Znajdź następujący wiersz (ctrl + f):

if ($options != null && count($options) > 0) {

dla mnie to był numer 551

i zmień na:

if ($options != null && count((array)$options) > 0) {

Ctrl + S, aby zapisać zmiany

oraz w terminalu: ctrl + c, aby uzyskać powrót promt ...

i: sudo systemctl restart apache2

„Myślę, że w nowej wersji php. Nie można używać count () ani sizeof () z typem un array. Wymuszenie parametru na array jest łatwym sposobem na rozwiązanie tego błędu, ...”

Dzięki za oryginalnego autora za rozwiązanie problemu! Próbuję to udostępnić!

Máté Kiss
źródło
3

Otwórz /usr/share/phpmyadmin/sql.lib.phpplik z podwyższonymi uprawnieniami i edytuj następujące funkcje PMA_isRememberSortingOrder():

  1. ~ wiersz 613, aby naprawić błąd początkowy:
    • Zastąpić || count($analyzed_sql_results['select_expr'] == 1)
    • Z || (count($analyzed_sql_results['select_expr']) == 1)
  2. ~ wiersz 614, aby naprawić błąd 500, który prawdopodobnie nastąpi:
    • Zastąpić && ($analyzed_sql_results['select_expr'][0] == '*')))
    • Z && ($analyzed_sql_results['select_expr'][0] == '*'))

Zrestartować serwer Apache: sudo service apache2 restart.

Testowany na Linux Mint 19.1 w oparciu o Ubuntu 18.04, z PhpMyAdmin 4.6.6 i PHP 7.2.

Elenche
źródło
3

Wypróbowałem wszystkie powyższe rozwiązania, ale dla mnie nie działało.

Spróbuj tego:-

Zainstaluj wymaganą wersję PHP (w moim przypadku 7.0), a następnie w terminalu wpisz

sudo update-alternatives --config php

Wyjście będzie wyglądało tak: -

wprowadź opis zdjęcia tutaj

Następnie możesz przełączyć się na dowolną wersję PHP, po prostu wpisując numer wyboru (w moim przypadku 1).

Mam nadzieję, że to może pomóc innym - :)

Tridev Shrestha
źródło
2

Miałem ten problem podczas korzystania z systemu Windows i powyższe odpowiedzi rozwiązały go dla mnie, jednak po przejściu na system Linux (Ubuntu 18.04 LTS) miałem ten sam problem i nie mogłem znaleźć sposobu, aby go rozwiązać, ponieważ nie widziałem pliku „/usr/share/phpmyadmin/libraries/sql.lib.php”.

Tego pliku sql.lib.php nie było w folderze współdzielonym ani w folderze phpmyadmin / libraries mojego katalogu / opt / lampp - ponieważ korzystałem z xampp na moim Ubuntu. Na podstawie aktualizacji dokonanej w Xampp (ponieważ korzystałem z najnowszej instalacji).

Odpowiedź jest nadal do zastąpienia: (count($analyzed_sql_results['select_expr'] == 1)

Z: (count($analyzed_sql_results['select_expr']) == 1

Jednak plik do wyszukania znajduje Sql.phpsię w/opt/lampp/phpmyadmin/libraries/classes/Sql.php

Przyszłe aktualizacje lub jeśli nadal ich nie znajdziesz: użyj, grep -r 'count($analyzed_sql_results' /opt/lampp/phpmyadminaby wyszukać pasujące dokumenty w katalogu i odpowiednio je edytować

KingNonso
źródło
2

Zamień funkcję:

function PMA_isRememberSortingOrder($analyzed_sql_results) {
return $GLOBALS['cfg']['RememberSorting']
    &&!(
        $analyzed_sql_results['is_count']
        || $analyzed_sql_results['is_export']
        || $analyzed_sql_results['is_func']
        || $analyzed_sql_results['is_analyse']
    )&&
    $analyzed_sql_results['select_from']&&
    (
        empty($analyzed_sql_results['select_expr'])||
        count($analyzed_sql_results['select_expr'])==1&&
        $analyzed_sql_results['select_expr'][0] == '*'
    )
    && count($analyzed_sql_results['select_tables']) == 1;
}
Arcaela
źródło
2

Edytuj plik /usr/share/phpmyadmin/libraries/sql.lib.php

Zobacz błąd na swoim błędzie

./libraries/sql.lib.php#2038: PMA_isRememberSortingOrder(array)
./libraries/sql.lib.php#1984: PMA_executeQueryAndGetQueryResponse(

przejdź do tej linii i usuń wywołanie funkcji.

Mi to pasuje.

amrit
źródło
2

Widzę, że wszyscy edytujesz lub aktualizujesz z naszych plików

Dla tych, którzy chcą automatycznych aktualizacji, możesz skorzystać z naszego Ubuntu PPA

sudo add-apt-repository ppa: phpmyadmin / ppa

Użytkownicy Debiana będą musieli poczekać na następną wersję Debiana lub skorzystać z PPA

Ubuntu 20 ma phpMyAdmin 4.9 lub nowszą wersję

Problem z Debianem na naszym trackerze

Policzalne problemy z naszym trackerem

Zaktualizuj TLDR do najnowszej wersji 4.9 lub 5.0, aby rozwiązać ten problem.

William Desportes
źródło
1

Na Ubuntu 18.04 z MariaDb i Nginx rozwiązałem go, aktualizując plik /usr/share/phpmyadmin/libraries/sql.lib.php w następujący sposób:

|| (count($analyzed_sql_results['select_expr']) == 1

Odpowiedź wspomniana przez @Nguyen zgłasza błąd 500, mówiąc:

FastCGI sent in stderr: "PHP message: PHP Parse error:  syntax error, unexpected ')', expecting ';' in /usr/share/phpmyadmin/libraries/sql.lib.php on line 614"
cwhisperer
źródło
1

Jako błąd w kodzie w pliku conf mogą się różnić (@Jacky Nguyen vs @ odpowiedzi ĦΔŇĐŘΔ ŇΔҜҜΔ) ogólne rozwiązanie odpowiedzią byłoby : a) skorygować logikę warunek w pliku conf sensu (x) lub b) instalowania poprawione / prąd phpmyadmin


Co do a)

  1. otwórz plik z kodem błędu
    Dla terminalu ludzie: sudo nano /usr/share/phpmyadmin/libraries/sql.lib.php
    Dla zwykłych ludzi:sudo gedit /usr/share/phpmyadmin/libraries/sql.lib.php

  2. znajdź warunek - po prostu wyszukaj $analyzed_sql_results['select_expr']

  3. teraz logika powinna polegać na sprawdzeniu, czy ta podtablica jest pusta lub czy ma tylko 1 element o wartości „*

  4. więc w zasadzie blok
    pomiędzy && $analyzed_sql_results['select_from']
    i && count($analyzed_sql_results['select_tables']) == 1
    powinien wyglądać mniej więcej tak

&& (
    empty($analyzed_sql_results['select_expr']) //the sub array is empty,
    || //or,
    (
        (count($analyzed_sql_results['select_expr']) == 1) //it has just 1 element
        && //and at the same time
        ($analyzed_sql_results['select_expr'][0] == '*') //the 1 element value is "*"
    )
)

Jest to dobry przykład tego, dlaczego wcięcie i upiększenie kodu, jeśli zostanie ono poprawnie wpisane, uważam, że tak się nigdy nie stanie, a przynajmniej łatwiej będzie je znaleźć.

jave.web
źródło
Mam zainstalowanego xamppa na moim komputerze Mac, nie mogłem znaleźć folderu / usr / share / phpmyadmin, a zatem „/usr/share/phpmyadmin/libraries/sql.lib.php” to nie jest dla mnie, czy możesz w tym pomóc?
Saurabh Verma
@SaurabhVerma przeszukuje plik w poszukiwaniu sql.lib.php lub folderu phpmyadmin - jeśli masz phpmyadmin, musi on być gdzieś zainstalowany
jave.web