前提
[ O S ] Windows 10
[Server] XAMPP 7.3.22
[ PHP ] 7.4.10
[ D B ] MariaDB 10.3.15
サーバーで稼働中のワードプレスで使用するテーマがPHP7.4以降でないと動作保証できないということになり、PHPを7.3.5から7.4.1へバージョンアップを実行。
その際、自作プログラムの方で使用しているPHPSpreadsheetもうまく動作しなくなったため、こちらも1.13.1から1.14.1へバージョンアップ。
2つのプログラムで検証したところ、中身は殆ど一緒なのに、片方だけでエラーが発生。
もととなるデータは両方同じものを利用しています。
エラーが発生しない(A)の方は、合計でも6シートにWHERE条件を分けて貼り付けています。
エラーが発生してしまう(B)の方は、合計で28シートになっていて、WHERE条件を変えているだけです。
実際にはエラー表示はされるものの、プログラム自体は実行を続けていて、最終的にエクセルのシートに落とし込みも出来ています。
ただ、出力されたエクセルのシートは破損しているとアラートが表示され、シート内に配置した『図形』が、全部ではなく一部のワークシートの図形が描写されないとエラーが発生します。
特定のワークシートだけ図形が描写されないなら、そのワークシートを削除してみたりすれば回避できそうなものの、特定のワークシートとは限らず、最終のワークシートのときもあれば、複数のワークシートにまたがる場合もあります。
発生している問題・エラーメッセージ
php
1Notice: Undefined variable: exception_value in 対象コード番号
エラーの箇所が28個発生していて、大体シートに貼り付けるあたりの部分で発生しています。
該当のソースコード
PHP
1 // 初期化 2 $data = []; 3 4 // シート選択 5 $sheet = $spreadsheet->getSheetByName('SZ'); 6 7 //実施日の記入 8 $sheet->setCellValue('H2', $impDate); 9 10 //バージョン情報の記入 11 $sheet->setCellValue('B3', $revInfo); 12 13 try { 14 // DB接続時にfetchモードを指定 15 $pdo = new PDO('mysql:host=localhost;dbname=stocker_a150;charset=utf8', 'root', '', 16 [PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE=>PDO::FETCH_ASSOC]); 17 18 foreach ($pdo->query("SELECT 19 `_mid_`, 20 `cnum_`, `cname`, `pnum_`, `bnum_`, `inum_`, 21 `dnum_`, `pname`, `psize`, `pmate`, `carea`, 22 `parea`, '前 ・ 中', NULL AS `_cmp_`, `_nq__` AS `nq01`, `_pq__`, 23 `smmtm`, `smhtm`, `smprm`, NULL AS `_spc_`, NULL AS`_tpc_`, 24 NULL AS `_oth_`, NULL AS `_clc_ `, `ratio`, `_sq__`, `_nq__` AS `nq02`, 25 `ascls`, `npart`, `pnow_`, `cpnow`, `plast`, 26 `pclss`, `_evq_`, NULL AS `_tsm_`, `upric`, `tpric`, 27 NULL AS `_8pc_`, `asnum`, `pndst`, `snum_`, `sname`, 28 `gnum_` 29 30 FROM `vw150f_main` 31 WHERE `pnum_` LIKE 'SZ%' 32 ORDER BY `cnum_`, `pnum_`, `bnum_`, `inum_` 33 34 ") 35 AS $row) { 36 $data[] = $row; 37 } 38 } 39 catch (PDOException $e) { 40 header('content-type: text/plain'); 41 die("データベース接続に失敗しました。: " . $e->getMessage() . "\n"); 42 } 43 44 if (isset($data)) { 45 $sheet->fromArray($data, $exception_value, 'A6'); 46 }
エラーが表示されるコード行には、共通して
php
1 if (isset($data)) { 2 $sheet->fromArray($data, $exception_value, 'A6'); 3 }
の部分の}
のあとがエラー行として表示されます。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。