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.