phpmyadmin - count (): พารามิเตอร์จะต้องเป็นอาร์เรย์หรือวัตถุที่ใช้นับได้


467

ฉันอัพโหลดข้อมูลสำรองไปยังตารางแล้วเปิดตารางฉันเห็นสิ่งนี้:

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)

ข้างใน phpMyAdmin ...

PHP คือ 7.2, เซิร์ฟเวอร์คือ Ubuntu 16.04, ติดตั้งเมื่อวานนี้

กำลังมองหาฉันเห็นว่าบางคนมีข้อผิดพลาดนี้ในรหัสของพวกเขา แต่ฉันไม่พบใครที่ได้รับใน phpMyAdmin ...

ฉันควรทำอย่างไรดี? นั่นเป็นข้อผิดพลาดของฉันหรือไม่ ข้อผิดพลาด phpmyadmin? รออัปเดตหรือไม่ ฉันกลับไปที่ PHP 7.1 หรือไม่


9
ผู้ที่ประสบปัญหาเช่นif ( count($articles)){..}ในCodeIgniterพวกเขาควรใช้: if ( count((array)$articles)){..}ดังที่นี่
— fWd82

2
ฉันมีปัญหานี้ใน phpmyadmin v4.6 ฉันอัปเดตเป็น 4.8 มันหายไป ดูเหมือนว่าจะมีบางอย่างที่เกี่ยวข้องกับ mariadb 10.3 เนื่องจากฉันไม่มีปัญหาเกี่ยวกับ mariadb 10.1 ด้วย phpmyadmin 4.6
— user889030

ในกรณีของฉันเกิดปัญหาขึ้นเมื่อฉันติดตั้ง php 7.3 ในขณะที่ phpMyAdmin ของฉันคือ 4.7.1 ฉันเปลี่ยนกลับไปเป็น php 7.0 และใช้งานได้ดีหรือคุณติดตั้ง phpMyAdmin รุ่น phpMyAdmin ที่ทำงานร่วมกับ php 7.3
— vinsa

คำตอบ:


875

แก้ไขไฟล์/usr/share/phpmyadmin/libraries/sql.lib.phpโดยใช้คำสั่งนี้:

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

On line ที่ 613 $analyzed_sql_results['select_expr']ฟังก์ชั่นการนับเสมอประเมินจริงเนื่องจากไม่มีวงเล็บปิดหลัง การใช้การแทนที่ด้านล่างจะช่วยแก้ปัญหานี้จากนั้นคุณจะต้องลบวงเล็บปิดล่าสุดที่บรรทัด 614 เนื่องจากตอนนี้เป็นวงเล็บพิเศษ

แทนที่:

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

ด้วย:

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

รีสตาร์ทเซิร์ฟเวอร์ apache:

sudo service apache2 restart

95
เหลือเชื่อ. ใช้งานได้กับ Ubuntu 18.04 เมื่อติดตั้ง phpmyadmin โดยใช้ apt
— PNDA

7
ทำงานในที่ฉันสามารถเลือกตาราง แต่กลับข้อผิดพลาดเมื่อฉันพยายามที่จะส่งออก Db
— Alperian

6
มีการรายงานข้อผิดพลาด: bugs.launchpad.net/ubuntu/+source/phpmyadmin/+bug/1767361
— Herbert

30
หากคุณประสบปัญหาคล้ายกันในการส่งออกฐานข้อมูลคุณต้องแก้ไข /usr/share/ phpmyadmin/l ไลบรารี/plugin_interface.lib.phpบรรทัด 551 จาก ถ้า ($ options! = null && นับ ($ options)> 0) {ถึง _if ($ options! = null && count ((array) $ options)> 0) { อาจจะน่าสนใจสำหรับ @alperian และคนอื่น ๆ
— Bernd Schuhmacher

5
สิ่งนี้ไม่ได้ผลสำหรับฉัน Error in processing request Error code: 500 Error text: Internal Server Errorผมได้ วิธีการแก้ปัญหาของ @Chandra Nakka ได้แก้ไขปัญหาของฉันแล้ว
— Jee

473

วิธีที่ง่ายที่สุด:

เพียงแค่เรียกใช้บรรทัดคำสั่งด้านล่างในเทอร์มินัลแล้วกลับมาที่ PhpMyAdmin ตอนนี้มันใช้งานได้ดี :)

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

คู่มือวิธีการ:

เปิดไฟล์sql.lib.php

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

ค้นหาcount($analyzed_sql_results['select_expr']รหัสในไฟล์ คุณจะได้รับที่เส้นนี้ ~ 613 คุณเห็นรหัสผิดด้านล่างนี้

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

เพียงแค่แทนที่รหัสผิดนั้นด้วยรหัสด้านล่างนี้

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

บันทึกไฟล์และมาPhpMyAdmin

ตอนนี้มันใช้งานได้ดี :)


39
ใช้งานได้ใน Ubuntu 18.04 เมื่อสิงหาคม 2018 :)
— Luiz Gonçalves

4
ใช้งานไม่ได้กับฉันใน Ubuntu 16.04
— SP Singh เมื่อ

2
ทำงานเหมือนจับใจ
— Rameez Rami

2
ทำงานบน Ubuntu 19.04 ขอบคุณ
— murume

4
เคล็ดลับเล็ก ๆ ที่เป็นระเบียบสำหรับนาโนคือคุณสามารถพิมพ์nano +613 filenameเพื่อนำคุณไปยังบรรทัดที่ระบุได้โดยตรง
— SteffenNielsen

102

ฉันพบว่าPHP 7.2 นับ () - ข้อผิดพลาด SYNTAX ใน sql.lib.php

ที่ทำงานได้อย่างสมบูรณ์ใน config ของฉัน:

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

เปิด /usr/share/phpmyadmin/libraries/sql.lib.php

เปลี่ยนสาย : ย้ายวงเล็บก่อน==

|| ( (นับ ($ anal_sql_results ['select_expr'] ) == 1) && ($ anal_sql_results ['select_expr'] [0] == '*')))

ใน

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;
 }

ในบรรทัดต่อไปนี้คุณจะต้องลบหนึ่งใน paranthesis ปิดท้าย
— floppes

ขอบคุณ ข้อผิดพลาดดังกล่าวได้รับการปล่อยตัวด้วยแพคเกจ apt ติดตั้งได้อย่างไร ไร้สาระนิดหน่อย
— Josh Morel

1
@floppes ไม่มันไม่ถูกต้อง คุณไม่ควรลบ paranthesis ที่ปิด ฉันได้ทดสอบวิธีการของคุณและมันเกิดserver errorขึ้น คำตอบของ @ loquace ควรเป็นคำตอบที่ได้รับการยอมรับ
— ยาว

ขอบคุณที่สะกดมันออกมาให้พวกเราและใช้ตัวอักษรหนาที่มันต้องการ ทั้งคำตอบที่ 1 และ 2 ไม่มีความชัดเจนเพียงพอสำหรับฉันเพราะพวกเขาไม่ได้พูดในสิ่งที่พวกเขาทำ การแก้ไข nano ไม่เหมือนกับ gedit หรืออะไรก็ตาม
— logicbloke

71

ทดสอบกับ Debian แล้วควรทำงานกับ Ubuntu:

1. ) ดาวน์โหลดไฟล์ phpMyadmin ล่าสุดก่อน

2. ) ลบ (สำรองข้อมูล) ไฟล์เวอร์ชันก่อนหน้าทั้งหมดที่อยู่ใน/usr/share/phpmyadminไดเรกทอรี

3. ) Uncompress เพื่อทำ/usr/share/phpmyadmin/ไดเร็กทอรีไฟล์ทั้งหมดของ phpmyadmin ล่าสุด

4. ) แก้ไขไฟล์libraries/vendor_config.phpและเปลี่ยนบรรทัด:

define('CONFIG_DIR', '');

ถึง

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

และ

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

ถึง

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

5. ) รีสตาร์ทเซิร์ฟเวอร์ apache และเสร็จสิ้น


3
ทำงานบน Ubuntu 16.04
— pjehan

7
ใช้งานได้กับ Ubuntu 18.04
— Simon Epskamp

5
Ubuntu 18.04, phpMyAdmin 4.8.0.1 - ฉันต้องการmkdir /usr/share/phpmyadmin/tmp; chgrp www-data tmp; chmod g+w tmp;
— billynoah

Ubuntu 16.04 เพียงดึงข้อมูลออกมาใช้/usr/share/phpmyadminงานได้ ไม่จำเป็นต้องทำตามขั้นตอนภายหลัง
— tushar.dahiwale

@billynoah กันที่นี่ด้วยการติดตั้งใหม่ ฉันสร้างไดเรกทอรี tmp ตั้งเป็น 777 รีสตาร์ท Apache ออกจาก phpMyAdmin และข้อผิดพลาดหายไป
— JScarry

38

แก้ไขไฟล์ :'/usr/share/phpmyadmin/libraries/sql.lib.php'

แทนที่ :(count($analyzed_sql_results['select_expr'] == 1)

ด้วย : (count($analyzed_sql_results['select_expr']) == 1

สิ่งนี้ใช้ได้สำหรับฉัน


มันทำงานได้สำหรับฉันตามเงื่อนไขคุณมีแก้ไขข้อผิดพลาดภายใน 500 แก้ไข แต่ข้อผิดพลาดเก่า "phpmyadmin - นับ (): พารามิเตอร์จะต้องเป็นอาร์เรย์หรือวัตถุที่ดำเนินการนับได้" ไม่ได้รับการแก้ไข
— shashik493

ดูเหมือนว่าจะได้ผลสำหรับฉัน แต่ไม่มีใครรู้ว่าทำไมสิ่งนี้จึงเกิดขึ้น phpmyadmin ของฉันทำงานได้ดีและทันใดนั้นฉันก็เข้าสู่ระบบในวันนี้และดูเหมือนจะมีปัญหานี้หรือไม่ Ubuntu 18.04.2 LTS
— wheelsmanx

ทำงานบน 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

สิ่งนี้ใช้ได้กับฉันในวันที่ 18.04 ขอบคุณ! ไม่จำเป็นต้องรีสตาร์ทเซิร์ฟเวอร์ - PHP แปลว่า 'สด'
— Jelle Veraa

@JelleVeraa คุณเป็นกรณีพิเศษ hehehe;)
— kaleem

32

หากใครบางคนมีข้อผิดพลาดที่คล้ายกันในหน้าการส่งออกฐานข้อมูล (ฉันมีปัญหานี้ใน Ubuntu 18.04) จากนั้นแทนที่บรรทัด 551 ในไฟล์/usr/share/phpmyadmin/libraries/plugin_interface.lib.phpด้วยรหัส

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

สิ่งนี้ช่วยฉันเช่นกัน แต่ฉันต้องทำทั้งคำตอบและสิ่งนี้ Ubuntu 18.04
— Karuhanga

2
สิ่งนี้ทำงานเพื่อกำจัดข้อความแสดงข้อผิดพลาด แต่ฉันคิดว่ามันหลีกเลี่ยงคำสั่ง if ทั้งหมดเข้าด้วยกันและฉันไม่ได้รับอะไรเลยในการส่งออกฐานข้อมูลของฉัน (มีข้อผิดพลาดจำนวนมากแสดงอยู่ที่ด้านล่างหลังจากรีเฟรชหน้า ส่งออกด้วยไฟล์ขนาดเล็ก)
— Warren Wang

จูบฉันรักคุณ
— โนอาห์คราสเซอร์

1
บน Debian 9 ให้แทนที่บรรทัด 551: if ($options != null && count($options) > 0) {ด้วย: if ($options != null) {จากนั้นคุณสามารถส่งออกได้
— BitDEVil2K16

สิ่งนี้เป็นสิ่งเดียวที่ทำงานใน 18.04
— TeT Psy


24

ดำเนินการตามขั้นตอนต่อไปนี้ที่ ubuntu-18.04:

ขั้นตอนที่ 1)ค้นหาsql.lib.php

มันจะแสดงสิ่งที่ชอบ:

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

ขั้นตอนที่ 2)เปิดเทอร์มินัล (Alt t) และเขียน:

sudo /usr/sbin/pma-configure

ขั้นตอน 3)sudo gedit /usr/share/phpmyadmin/libraries/sql.lib.php และค้นหาฟังก์ชันด้านล่าง:

 

    ฟังก์ชัน PMA_isRememberSortingOrder ($ วิเคราะห์_sql_results)
     {
        ส่งคืน $ GLOBALS ['cfg'] ['RememberSorting']
            &&! ($ analyzed_sql_results [ 'is_count']
                || $ analyzed_sql_results [ 'is_export']
                || $ analyzed_sql_results [ 'is_func']
                || $ analyzed_sql_results [ 'is_analyse'])
            && $ analysql_results ['select_from']
            && ((ว่าง ($ anal_sql_results ['select_expr']))
                || (นับ ($ วิเคราะห์_sql_results ['select_expr'] == 1)
                    && ($ วิเคราะห์_sql_results ['select_expr'] [0] == '*')))
            && นับ ($ วิเคราะห์_sql_results ['select_tables']) == 1;
     }

ขั้นตอนที่ 4)แทนที่ฟังก์ชั่นด้านบนด้วย:

     ฟังก์ชัน PMA_isRememberSortingOrder ($ วิเคราะห์_sql_results)
     {
        ส่งคืน $ GLOBALS ['cfg'] ['RememberSorting']
            &&! ($ analyzed_sql_results [ 'is_count']
                || $ analyzed_sql_results [ 'is_export']
                || $ analyzed_sql_results [ 'is_func']
                || $ analyzed_sql_results [ 'is_analyse'])
            && $ analysql_results ['select_from']
            && ((ว่าง ($ anal_sql_results ['select_expr']))
                || (นับ ($ วิเคราะห์_sql_results ['select_expr']) == 1)
                    && ($ วิเคราะห์_sql_results ['select_expr'] [0] == '*'))
            && นับ ($ วิเคราะห์_sql_results ['select_tables']) == 1;
     }

ขั้นตอนที่ 4)บันทึก & ปิดไฟล์และคำสั่งด้านล่างบนเทอร์มินัล

sudo /usr/sbin/pma-secure

ขั้นตอนที่ 5) sudo service mysql reload

ขั้นตอนที่ 6) sudo service apache2 reload

มันใช้งานได้สำหรับฉัน .. Goodluck


ไม่จำเป็นต้องโหลด MySQL และ Apache อีกครั้ง
— Tacsiazuma

ฉันได้รับข้อความนี้หลังจากแก้ไขไฟล์: "- root @ Lalla: ~ # / usr / sbin / pma-secure - การติดตั้ง phpMyAdmin ที่ปลอดภัย ... - สคริปต์การติดตั้งจะไม่สามารถเขียนการกำหนดค่าได้ - root @ Lalla: ~ # "
— cl-r

22

เปิดไฟล์นี้: '/usr/share/phpmyadmin/l ไลบรารี/sql.lib.php'

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

กด ctrl + w เพื่อค้นหา (นับ ($ วิเคราะห์_sql_results ['select_expr'] == 1)

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

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

รีสตาร์ทเซิร์ฟเวอร์

 sudo service apache2 restart

นอกจากนี้หากคุณยังคงประสบปัญหาเดียวกันให้ทำตาม

เปิดไฟล์นี้ / usr/share/phpmyadmin/l ไลบรารี/plugin_interface.lib.php

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

ค้นหา: if ($ options! = null && count ($ options)> 0) {

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

แทนที่ด้วยรหัสต่อไปนี้

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

ตอนนี้บันทึกและรีสตาร์ทเซิร์ฟเวอร์

sudo /etc/init.d/apache2 restart

คุณเพียงแค่เพิ่มรั้ง แต่ขอบคุณ. ฉันลบเครื่องหมายปีกกาเสริมตอนท้ายบรรทัด
— redestructa

ฉันติดตั้ง xampp บน mac ของฉันฉันหาโฟลเดอร์ / usr / share / phpmyadmin ไม่ได้และด้วยเหตุนี้ '/usr/share/phpmyadmin/l ไลบรารี/sql.lib.php' ปริมาณนี้มีอยู่สำหรับฉันคุณช่วยได้ไหม?
— Saurabh Verma

18

ฉันคิดว่าตัวเลือกที่ดีที่สุดคือการอัปเดต Phpmyadmin เป็นเวอร์ชันที่มีการแก้ไขแล้ว

จนกว่าจะมีการเผยแพร่เป็นเดบิตคุณสามารถทำได้เหมือนใน@ crimson-501 คำตอบซึ่งฉันจะคัดลอกด้านล่าง:

  • ขั้นตอนแรกของคุณคือการติดตั้ง PMA (phpMyAdmin) อย่างเป็นทางการจากอูบุนตู apt-get install phpmyadminrepo:
  • ถัดไป, CD ลงในไดเรกทอรี / หุ้น cd /usr/shareusr:
  • ประการที่สามการลบไดเรกทอรี phpMyAdmin rm -rf phpmyadminนี้:
  • ตอนนี้เราต้องดาวน์โหลดเวอร์ชันล่าสุด PMA เข้าสู่ระบบของเรา (ทราบว่าคุณต้อง wget: apt-get install wget): wget -P /usr/share/ "https://files.phpmyadmin.net/phpMyAdmin/4.9.4/phpMyAdmin-4.9.4-english.zip" ผมขออธิบายการขัดแย้งของคำสั่งนี้, -P กำหนดเส้นทางและ "link.zip" การอยู่ในขณะนี้ (7/17/18 ) PMA รุ่นล่าสุด คุณสามารถค้นหาเชื่อมโยงเหล่านั้นที่นี่
  • สำหรับขั้นตอนต่อไปนี้คุณจะต้องเปิดเครื่องรูด ( ):apt-get install unzip unzip phpMyAdmin-4.9.4-english.zipเราเพิ่งซิป PMA ตอนนี้เราจะย้ายไปที่บ้านหลังสุดท้าย
  • ให้ใช้cpคำสั่ง (คัดลอก) เพื่อย้ายไฟล์ของเรา! โปรดทราบว่าเราต้องเพิ่ม-rอาร์กิวเมนต์เนื่องจากนี่เป็นโฟลเดอร์ cp -r phpMyAdmin-4.9.4-english phpmyadmin.
  • rm -rf phpMyAdmin-4.9.4-englishตอนนี้มันถึงเวลาที่จะทำความสะอาด:

อ่านต่อ!

ตอนนี้คุณอาจสังเกตเห็นข้อผิดพลาดสองข้อหลังจากคุณเข้าสู่ 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.

อย่างไรก็ตามปัญหาเหล่านี้ค่อนข้างง่ายต่อการแก้ไข สำหรับปัญหาแรกสิ่งที่คุณต้องทำคือคว้าตัวเลือกและแก้ไข/usr/share/phpmyadmin/config.inc.phpแต่มีปัญหาเราลบออก! ไม่เป็นไรสิ่งที่คุณต้องทำคือ: cd /usr/share/phpmyadmin& cp config.sample.inc.php config.inc.php.

  • ตอนนี้เราจะเพิ่มความลับปักเป้าของเรา! nano config.inc.phpและคัดลอกลับที่สร้างแบบไดนามิกจากบริเวณด้านล่างของหน้านี้: https://www.question-defense.com/tools/phpmyadmin-blowfish-secret-generator

ตัวอย่าง phpMyAdmin Blowfish Secret รายการตัวแปร:

/*
 * 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! */

ตอนนี้บันทึกและปิดไฟล์

  • ตอนนี้เราจะสร้างไดเรกทอรี tmp สำหรับ mkdir tmpPMA: chown -R www-data:www-data /usr/share/phpmyadmin/tmp& คำสั่งสุดท้ายให้ Apache เว็บเซิร์ฟเวอร์เป็นเจ้าของไดเรกทอรี tmp และแก้ไขเนื้อหา

คำตอบนี้มีประโยชน์อย่างเหลือเชื่อ! แก้ไขปัญหาให้ฉัน! ขอบคุณ! PS: คุณสามารถค้นหาเครื่องกำเนิดปักเป้าได้ทางออนไลน์
— lucbas

และวิธีการแก้ปัญหาที่ลิงค์นี้: devanswers.co/manually-upgrade-phpmyadmin เป็นไปตามแผนที่คล้ายกันยกเว้นแทนที่ขั้นตอนปักเป้ากับคนที่ง่ายขึ้น ..
— gwideman

นี่เป็นวิธีที่ดีกว่าเมื่อเทียบกับการแก้ไขไฟล์ปรับแต่งรุ่นเก่า
— andromeda

17

ลองแทนที่ฟังก์ชั่นนี้ในไฟล์: /usr/share/phpmyadmin/l ไลบรารี/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;
}

ขอบคุณ! บรรทัดนี้เป็นที่ที่ฉันเข้าใจผิดในตอนท้ายที่ฉันมีวงเล็บปิด 3 ตัวติดตั้งไว้ฉันต้องใช้วงเล็บปิด 2 อันเท่านั้น && $ ($ anal_sql_results ['select_expr'] [0] == '*') ทำงานบน phpmyadmin 4.6, php 7.2.10, Ubuntu 18.4.1
— Wang'l Pakhrin

17

Ubuntu 18.04 LTS

นี่คือขั้นตอนที่เหมาะกับฉัน ขอขอบคุณ William Desportes ที่ให้การอัปเดตอัตโนมัติบน Ubuntu PPA ของพวกเขามากมาย

ขั้นตอนที่ 1 ( จากโพสต์ William Desportes )
$sudo add-apt-repository ppa:phpmyadmin/ppa

ขั้นตอนที่ 2
$sudo apt-get --with-new-pkgs upgrade

ขั้นตอนที่ 3
$sudo service mysql restart

หากคุณมีปัญหาในการรีสตาร์ท mysql คุณสามารถรีสตาร์ทโดยใช้ลำดับต่อไปนี้
$ sudo service mysql stop;
$sudo service mysql start;


2
แก้ไขปัญหาบน Ubuntu 18.04 LTS ควรเป็นคำตอบที่ยอมรับได้
— bgaze

15

Ubuntu 18.10 (ธันวาคม 2018)

บรรทัด 613, 614, 615, แทนที่ด้วย:

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

มันทำงานได้สำหรับฉัน .. ไม่จำเป็นต้องอัพเกรด mysql หรืออะไร ... ขอบคุณ @ole
— Nitin Vaghani

15

ทำงานให้ฉัน .. Ubuntu 18.04

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

ค้นหาcount($analyzed_sql_results['select_expr']รหัสในไฟล์ คุณสามารถรับได้ที่บรรทัด ~ 613

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

เพียงแทนที่ด้วยรหัส:

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

บันทึกไฟล์และโหลด PhpMyAdmin อีกครั้ง

เสร็จสิ้น !!!


1
ในบรรทัด 613 เปลี่ยนเป็น|| (count($analyzed_sql_results['select_expr']) == 1
— tnductam

11

สำหรับ phpmyadmin เวอร์ชันของฉัน (4.6.6deb5) ฉันพบบรรทัดที่ 613 และตระหนักว่าการนับ () วงเล็บไม่ปิดอย่างถูกต้อง ในการแก้ไขปัญหานี้ชั่วคราวจนกว่าจะถึงรุ่นถัดไปเพียงแค่เปลี่ยน:

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

ถึง:

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

มีวงเล็บที่ขาดหายไปเพื่อปิดการเรียกฟังก์ชัน || (นับ ($ วิเคราะห์_sql_results ['select_expr']) == 1 เป็นคำสั่งที่ถูกต้อง
— Ruberandinda Patience

พา ธ ไฟล์คือ "/usr/share/phpmyadmin/l ไลบรารี/sql.lib.php" สำหรับผู้ที่ไม่รู้ว่าจะหาได้ที่ไหน
— Ali Imran

9

สิ่งนี้ได้รับการแก้ไขใน PHPMyAdmin รุ่นที่ใหม่กว่า ที่เก็บซอฟแวร์ของ Ubuntu สำหรับ Ubuntu 18.04.2 มีรุ่น 4.6.6.5 ในขณะที่อยู่ที่ 4.9.0.1 การอัปเดตการติดตั้ง PHPMyAdmin ของคุณจะแก้ไขปัญหานี้ได้ แต่อาจพิสูจน์ว่ามีความเสี่ยงมากกว่าการแก้ไขโค้ดหนึ่งบรรทัด นี่คือวิธีที่ฉันทำบนเซิร์ฟเวอร์ Ubuntu ของฉัน ขั้นตอนนั้นเหมือนกัน (พร้อมเส้นทางที่แตกต่าง) สำหรับระบบปฏิบัติการทั้งหมด

  1. ดาวน์โหลด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. สำรองข้อมูลการติดตั้ง PHPMyAdmin เก่าของคุณ
cp -r /usr/share/phpmyadmin ~/phpmyadmin-backup
  1. วาง PHPMyAdmin ใหม่ของคุณบน PHPMyAdmin เก่าของคุณ
cd phpMyAdmin-4.9.0.1-all-languages
rm -r /usr/share/phpmyadmin/doc/html
cp -R * /usr/share/phpmyadmin/

ตรวจสอบว่ามันใช้งานได้ หากไม่เป็นเช่นนั้นคุณมีข้อมูลสำรองดังนั้นให้กู้คืนและแก้ไขบรรทัดที่ผิดพลาดด้วยตนเอง จากประสบการณ์ส่วนตัวของฉันฉันค้นพบหลังจากทำสิ่งนี้เวอร์ชัน 4.6.6.5 ไม่เพียง แต่เต็มไปด้วยข้อบกพร่องเท่านั้น แต่ยังช้าอย่างไม่น่าเชื่อเมื่อเทียบกับ 4.9.0.1 ใหม่ การเพิ่มความเร็วนั้นเป็นเวทย์มนตร์ที่บริสุทธิ์สำหรับสิ่งที่ฉันคิดว่ามีคุณภาพ "WordPress"


ฉันจะเปลี่ยนลำดับของ 1 และ 2 และก่อน wget ฉันจะcd / tmpแต่นอกเหนือจากนั้นยอดเยี่ยมขอบคุณ
— Chris

มันใช้งานได้สำหรับฉันขอบคุณสำหรับวิธีแก้ปัญหาง่าย ๆ !
— uestcfei

8

ใช้งานได้กับ UBUNTU 16.04.3 เพียงแค่เปิด

usr / share / ห้องสมุด / sql.lib.php

ปรับเปลี่ยน

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

ถึง

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


5

อัปเกรดเป็น phpMyAdmin 4.8.3 วิธีนี้จะช่วยแก้ปัญหาความเข้ากันได้ของ PHP 7.2


5

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

นี่คือสิ่งที่ฉันเปลี่ยนในบรรทัด 614 และ phpmyadmin ทำงานได้โดยไม่มีข้อผิดพลาด จำเป็นต้องใช้(ก่อนที่จะนับหนึ่งก่อน) ==แค่นั้นแหละ.


4

แก้ไขไฟล์ '/usr/share/phpmyadmin/l ไลบรารี/sql.lib.php' แทนที่: (ทำการสำรองข้อมูล)

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

ด้วย:

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

3

สวัสดีต่อไปนี้แก้ปัญหาเดียวกันของฉันอย่างแน่นอน (นำเข้า / ส่งออกและอื่น ๆ ):

แก้ไขข้อผิดพลาด Phpmyadmin [plugin_interface.lib.php] + Php7.2 + Ubuntu 16.04

ดังนั้น ... ภายใต้ Ubuntu 18.04, mysql, php7.2: เทอร์มินัล:

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

ค้นหาบรรทัดต่อไปนี้ (ctrl + f):

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

มันอยู่ในบรรทัด # 551 สำหรับฉัน

และการเปลี่ยนแปลงต่อไปนี้:

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

ctrl + s สำหรับบันทึกการเปลี่ยนแปลง

และใน terminal: ctrl + c เพื่อรับ promt กลับ ...

และ: sudo systemctl restart apache2

"ฉันคิดว่าในเวอร์ชัน php ใหม่มันไม่สามารถใช้ count () หรือ sizeof () กับ un array type ได้พารามิเตอร์ Force to array เป็นวิธีที่ง่ายในการแก้ไขข้อบกพร่องนี้ ... "

ขอบคุณสำหรับผู้เขียนต้นฉบับสำหรับการแก้ปัญหา! ฉันพยายามแบ่งปัน!


3

เปิด/usr/share/phpmyadmin/sql.lib.phpไฟล์ที่มีสิทธิ์ยกระดับและแก้ไขสิ่งต่อไปนี้ในฟังก์ชั่นPMA_isRememberSortingOrder():

  1. ~ บรรทัด 613 เพื่อแก้ไขข้อผิดพลาดเริ่มต้น:
    • แทนที่ || count($analyzed_sql_results['select_expr'] == 1)
    • กับ || (count($analyzed_sql_results['select_expr']) == 1)
  2. ~ บรรทัด 614 เพื่อแก้ไขข้อผิดพลาด 500 ที่อาจเป็นไปตาม:
    • แทนที่ && ($analyzed_sql_results['select_expr'][0] == '*')))
    • กับ && ($analyzed_sql_results['select_expr'][0] == '*'))

เริ่มต้นเซิร์ฟเวอร์ Apache sudo service apache2 restartของคุณ:

ทดสอบบน Linux Mint 19.1 บน Ubuntu 18.04 โดยมี PhpMyAdmin 4.6.6 และ PHP 7.2


3

ฉันลองวิธีแก้ปัญหาทั้งหมดข้างต้น แต่ไม่ได้ผลสำหรับฉัน

ลองนี้: -

ติดตั้ง PHP รุ่นที่ต้องการ (ในกรณีของฉัน 7.0) จากนั้นในเทอร์มินัลพิมพ์

sudo update-alternatives --config php

ผลลัพธ์จะเป็นดังนี้: -

ป้อนคำอธิบายรูปภาพที่นี่

จากนั้นคุณสามารถเปลี่ยนเป็น PHP รุ่นใดก็ได้โดยเพียงป้อนหมายเลขตัวเลือก (ในกรณีของฉัน 1)

หวังว่านี่จะช่วยคนอื่นได้ - :)


2

ฉันมีปัญหานี้เมื่อใช้ windows และคำตอบข้างต้นแก้ปัญหาให้ฉันได้ แต่เมื่อฉันเปลี่ยนเป็น linux (ubuntu 18.04 LTS) ฉันมีปัญหาเดียวกันและไม่สามารถหาวิธีแก้ไขได้เพราะฉันไม่เห็นไฟล์ '/usr/share/phpmyadmin/libraries/sql.lib.php'

ไฟล์ sql.lib.php นี้ไม่ได้อยู่ในโฟลเดอร์แชร์หรือโฟลเดอร์ phpmyadmin / ไลบรารีของไดเรกทอรี / opt / lampp ของฉัน - เนื่องจากฉันใช้ xampp บน Ubuntu ของฉัน ตามการอัปเดตที่ทำกับ xampp (เพราะฉันใช้การติดตั้งล่าสุด ณ ตอนนี้) การติดตั้ง

คำตอบยังคงแทนที่: (count($analyzed_sql_results['select_expr'] == 1)

ด้วย: (count($analyzed_sql_results['select_expr']) == 1

อย่างไรก็ตามไฟล์ที่จะมองหาจะSql.phpพบได้ใน/opt/lampp/phpmyadmin/libraries/classes/Sql.php

การอัปเดตในอนาคตหรือหากคุณยังไม่พบ: ใช้grep -r 'count($analyzed_sql_results' /opt/lampp/phpmyadminสำหรับค้นหาเอกสารที่ตรงกันในไดเรกทอรีของคุณและแก้ไขตามนั้น


2

แทนที่ฟังก์ชั่น:

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;
}

2

แก้ไขไฟล์ /usr/share/phpmyadmin/libraries/sql.lib.php

ดูข้อผิดพลาดเกี่ยวกับข้อผิดพลาดของคุณ

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

ไปที่บรรทัดนี้และลบการเรียกใช้ฟังก์ชัน

มันใช้งานได้สำหรับฉัน


2

ฉันเห็นว่าคุณทุกคนกำลังแก้ไขหรืออัปเดตจากไฟล์ของเรา

สำหรับผู้ที่ต้องการอัพเดทอัตโนมัติคุณสามารถใช้ Ubuntu PPA ของเรา

sudo add-apt-repository ppa: phpmyadmin / ppa

และสำหรับผู้ใช้ Debian คุณจะต้องรอ Debian รุ่นถัดไปหรือใช้ PPA

Ubuntu 20 มี phpMyAdmin 4.9 หรือรุ่นที่ใหม่กว่า

ปัญหาเดเบียนในตัวติดตามของเรา

ปัญหาที่นับได้ในตัวติดตามของเรา

อัปเดต TLDR เป็นเวอร์ชัน 4.9 หรือ 5.0 ล่าสุดเพื่อแก้ไขปัญหานี้


1

ใน Ubuntu 18.04 กับ MariaDb และ Nginx ฉันแก้ไขด้วยการอัปเดตไฟล์ /usr/share/phpmyadmin/l ไลบรารี/sql.lib.phpดังนี้

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

คำตอบที่ @Nguyen พูดถึงมีข้อผิดพลาด 500 ข้อที่กล่าวว่า:

FastCGI sent in stderr: "PHP message: PHP Parse error:  syntax error, unexpected ')', expecting ';' in /usr/share/phpmyadmin/libraries/sql.lib.php on line 614"

1

ในฐานะที่เป็นข้อผิดพลาดในรหัสในไฟล์ conf อาจแตกต่างกัน (@Jacky เหงียน VS @ ตอบĦΔŇĐŘΔŇΔҜҜΔ) แก้ปัญหาทั่วไป คำตอบจะ ก) แก้ไขตรรกะเงื่อนไขในไฟล์ conf จะทำให้ความรู้สึก (x) หรือข) การติดตั้งการแก้ไข / ปัจจุบัน phpMyAdmin


ในฐานะที่เป็น

  1. เปิดไฟล์ที่มีรหัสข้อผิดพลาด
    สำหรับผู้ใช้เทอร์มินัล: sudo nano /usr/share/phpmyadmin/libraries/sql.lib.php
    สำหรับผู้ใช้ทั่วไป:sudo gedit /usr/share/phpmyadmin/libraries/sql.lib.php

  2. ค้นหาเงื่อนไข - โดยทั่วไปค้นหา $analyzed_sql_results['select_expr']

  3. ตอนนี้ตรรกะควรจะตรวจสอบว่าอาร์เรย์ย่อยนี้ว่างเปล่าหรือไม่ว่าจะมีเพียง 1 องค์ประกอบที่มีค่า "*

  4. โดยทั่วไปบล็อก
    ระหว่าง&& $analyzed_sql_results['select_from']
    และ&& count($analyzed_sql_results['select_tables']) == 1
    ควรมีลักษณะเช่นนี้

&& (
    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 "*"
    )
)

นี่เป็นตัวอย่างที่ดีของการเยื้องและตกแต่งโค้ดของคุณถ้ามันถูกลบอย่างถูกต้องฉันเชื่อว่าสิ่งนี้จะไม่เกิดขึ้นหรืออย่างน้อยก็จะพบได้ง่ายขึ้น


ฉันติดตั้ง xampp บน mac ของฉันฉันหาโฟลเดอร์ / usr / share / phpmyadmin ไม่ได้และด้วยเหตุนี้ '/usr/share/phpmyadmin/l ไลบรารี/sql.lib.php' ปริมาณนี้มีอยู่สำหรับฉันคุณช่วยได้ไหม?
— Saurabh Verma

@SaurabhVerma ทำการค้นหาไฟล์สำหรับ sql.lib.php หรือโฟลเดอร์ phpmyadmin - หากคุณมี phpmyadmin จะต้องติดตั้งที่อื่น
— jave.web
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.