環境
名称 | バージョン |
---|---|
PHP | 7.4.26 |
問題
フレームワークなしのPHPで作成されたWebシステムを機能改修している中で、ヒアドキュメントを使ってSQLクエリを作っていた箇所があった。
別の担当者がその部分のソースを触って、その人がPJから去った後に自分が動作確認したら、触ったソースが関与している処理が機能していなかった。
解決方法
誤入力で入れたのであろうインデント1個に不幸にされてた\(^o^)/
test.php
<?php
/* ====================
* 変更前のソース
* ====================
*/
$from = <<<SQL
test_table
SQL;
$order = <<<SQL
ORDER BY id ASC
SQL;
$limit = <<<SQL
LIMIT 20
SQL;
var_dump("SELECT * FROM " .$from .$order .$limit);
// SELECT * FROM test_table ORDER BY id ASC LIMIT 20
/* ====================
* 変更後のソース
* ====================
*/
$from = <<<SQL
test_table
SQL;
$order = <<<SQL
ORDER BY id ASC
SQL;
$limit = <<<SQL
LIMIT 20
SQL;
var_dump("SELECT * FROM " .$from .$order .$limit);
// SELECT * FROM test_tableORDER BY id ASC LIMIT 20
?>
終端IDのインデントした分が文字列本体の全ての行から削除されます。
後書き
噂には聞いていたものの、インデントが動作に直結する場面に遭遇したのは初めてだったので「おぉ~ほんとうにあるんだ~」ってなりました。。