ようこそ! 情シス営業日誌 Monday, January 30 2023 @ 04:48 PM JST

phpMyAdminのテーブルエクスポート画面でエラー

  • 投稿者:
  • 表示回数 11,411
phpMyAdmin

phpmyadmin 4.6.6deb5で確認しています。
phpMyAdminのテーブルエクスポート画面でエラーが表示されました。

この記事は、phpのエラーメッセージが画面に出ていると「保護されていない通信」が表示されるようですので、エラーメッセージは本文へ転記しました。
下記、「続きを読む」で記事を全文表示しますと「保護されていない通信」が表示されます。
ご注意ください。

Quitaにある記事だと、phpとphpMyAdminのバージョンの齟齬が原因とのこと。

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

Backtrace

./libraries/display_export.lib.php#381: PMA_pluginGetOptions(
string 'Export',
array,
)
./libraries/display_export.lib.php#883: PMA_getHtmlForExportOptionsFormat(array)
./libraries/display_export.lib.php#1099: PMA_getHtmlForExportOptions(
string 'table',
string 'mysql',
string 'user',
string '',
integer 0,
array,
integer 0,
)
./tbl_export.php#143: PMA_getExportDisplay(
string 'table',
string 'mysql',
string 'user',
string '',
integer 0,
integer 0,
string '',
)

確かに、php7.2から、count(null)に対して0ではなく、warningを返すようにしたという仕様変更があったことがわかりました。

つまり、エラーになってる場所を見ると、

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

ですので、$optionsがnullの場合にwarningになってそうです。
しかし、ここの場所では、$optionsがnullなら、前の条件式で引っかかりcount() まで評価されているように思えません。
とすると...。

なるほど、$optionsがarrayじゃない場合、この警告が表示されているというわけですね。
しかし、apt-get install phpmyadmin でインストールされるパッケージが、こんなんじゃ、正直、困ります。
早急に改修されたものにupdateされることを期待します。

当面困るので、強制的に型変換するとどうなるか、試してみました。

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

あっ、エラーが消えた。w
正しい答えとも思えないので、非公式修正方法です。