[PHP-users 4408] 文字列のサイズを変更するには?

Hisashi Sasaki php-users@php.gr.jp
Fri, 21 Dec 2001 22:26:18 +0900


佐々木と申します。

[状況]
SQL文をユーザが指定したテーブル名からプログラム的に作成して
問い合わせを行うようにしました。指定するテーブル名が多くなった
場合に 文字列があふれて、 正しいSQL文にならず 問い合わせに
失敗してしまいました。

Warning: PostgreSQL query failed: ERROR: Column 'day' is ambiguous in
/usr/home/sasaki/public_html/web/php/ex1/cmd.php on line 241
SQL:"SELECT day FROM ZC86A_AGC_010328 UNION ALL SELECT day FROM ZC86A_AGC_010404 UNION ALL SELECT
day FROM ZC86A_AGC_010410 UNION ALL SELECT day FROM ZC86A_AGC_010411 UNION ALL SELECT day FROM
ZC86A_AGC_010424 UNION ALL SELECT day FROM ZC86A_AGC_010507 UNION ALL SELECT day FROM
ZC86A_AGC_010519 UNION ALL SELECT day FROM ZC86A_AGC_010521 UNION ALL SELECT day FROM
ZC86A_AGC_010521_shibu UNION ALL SELECT day FROM ZC86A_AGC_010601 UNION ALL SELECT day FROM
ZC86A_AGC_010618 UNION ALL SELECT day FROM ZC86A_MIX UNION ALL SELECT day FROM ZC86A_QMOD_010329
UNION ALL SELECT day FROM ZC86A_SEKKEI_TYU UNION ALL SELECT day FROM ZC86A_UMTS_IF_010601 UNION ALL
SELECT day FROM ZC86A_UMTS_IF_010604 UNION ALL SELECT day FROM ZC86A_UMTS_IF_010614 UNION ALL SELECT
day FROM ZC86A_UMTS_IF_010614_test UNION ALL SELECT day FROM ZC86A_UMTS_IF_010626 UNION ALL SELECT day
FROM ZC86A_UMTS_IF_010720 UNION ALL SELECT day FROM ZC86A_UMTS_IF_011004 UNION ALL SELECT day FROM
ZC86A_UMTS_IF_011012 UNION ALL SELECT day FROM ZC86A_a2a UNION ALL SELECT day FROM ZC86A_a2b UNION ALL
SELECT day FROM ZC86A_a2b_0718 UNION ALL SELECT day FROM ZC86A_a2h UNION ALL SELECT day FROM
ZC86A_a2h_0507 UNION ALL SELECT day FROM ZC86A_a2k UNION ALL SELECT day FROM ZC86A_a2k_DD_0507 UNION
ALL SELECT day FROM ZC86A_a2m UNION ALL SELECT day FROM ZC86A_a2m_0824 UNION ALL SELECT day FROM
ZC86A_a2m_0828 UNION ALL SELECT day FROM ZC86A_a2m_0904 UNION ALL SELECT day FROM ZC86A_a2m_0906
UNION ALL SELECT day FROM ZC86A_a2m_0908 UNION ALL SELECT day FROM ZC86A_a2m_0909 UNION ALL SELECT
day FROM ZC86A_a2m_0913 UNION ALL SELECT day FROM ZC86A_a2m_0917 UNION ALL SELECT day FROM
ZC86A_a2m_0919_sch UNION ALL SELECT day FROM ZC86A_a2m_0925 UNION ALL SELECT day FROM ZC86A_a2m_1008
UNION ALL SELECT day FROM ZC86A_a2m_local UNION ALL SELECT day FROM ZC86A_a2n UNION ALL SELECT day
FROM ZC86A_a2s UNION ALL SELECT day FROM ZC86A_a2y UNION ALL SELECT day FROM ZC86A_cia_LPFAGC_U0Z
UNION ALL SELECT day FROM ZC86A_logic UNION ALL SELECT day FROM ZC86A_mix UNION ALL SELECT day FROM
ZC86A_ryu UNION ALL SELECT day FROM ZC86A_umeda,ZC86_UMTSQMOD_a2k,ZC86_a2k ORDER BY day"の実行に失敗し
ました。

とエラーがでます。 最後の ZC86_UMTSQMOD_a2k,ZC86_a2k がうまく UNION されていません。(小さいときはチャント、
UNIONされていっています。)

このSQLは、

$sql_body = "";  // initialize to empty string ←●ここの$sql_bodyの文字サイズが足りないと思われます...
for($i=0; $i<sizeof($names); $i++) {
    switch ($i) {
    case "0":
        $sql_body = "SELECT path_name AS パス, cell_name AS ブロック名, day AS $day_alias, daytime AS 日時, comment AS コメント 
FROM $names[$i]";
        break;
    default:
        $sql_body = $sql_body . " UNION ALL SELECT path_name AS パス, cell_name AS ブロック名, day AS $day_alias, daytime AS 日時, 
comment AS コメント FROM $names[$i]";
    }; 
};

として $sql_body でSQL文を作成しています。($names[$i]に ZC86A_AGC_010328, .... , ZC86_a2kのテーブル名が順次きます。)

[質問] 
今まで、文字列を使うときに、PHPでは特にサイズ的な宣言をしないでも
使えてしまうので、気にしてませんでした。上記のようなエラーがでましたので、
defaultのサイズを超えた場合どのようにすればよいか 分かりません。
どなたかお教えください。
本などで調べてみましたが、よく分かりませんでした。

以上 よろしくお願いいたします。

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
佐々木 尚(ひさし)
株式会社 東芝 セミコンダクタ社 システムLSI事業部
アナログ・ペリフェラル統括部 LCDドライバー担当
工学博士 主務
〒247-8585 横浜市栄区笠間町1000-1
       マイクロエレクトロニクスセンター
ダイアルイン(045)890−2635
ファクシミリ(045)890−2691
E−メイル hisashi3.sasaki@toshiba.co.jp
http://www.semicon.toshiba.co.jp/
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−