1

夕方のすべて。

プロパティ Web サイト用の mysql データベースがあります。同じフィールドに場所または郵便番号を入力できる検索フォームがあります。

SQLの一部は

PostCode LIKE '$Loc%

私の問題を置くと、「l236yt」のような郵便番号を入力する人もいれば、「l23 6yt」のようなスペースを含む人もいます。

データベースにはスペースを含む郵便番号が含まれているため、スペースの有無にかかわらずどのように機能させることができますか??

どんな助けでも大歓迎です

ありがとうバズ

4

4 に答える 4

0

文字列を文字の配列に変換し、スペースを検索して、何も見つからない場合は、スペースの挿入に進むことができます (スペースは常に 6 文字の郵便番号の 3 文字目の後、および7文字の郵便番号の4番目の文字なので、正規表現を使用してこれを非常に簡単に行うことができます.5文字の長さの郵便番号もあり、これらはA1 1AAのようになると思います.2番目の文字の後にスペース。

言語の知識が不足しているため、正確なコードを作成することはできませんが、頑張ってください!

于 2013-02-15T21:46:43.800 に答える
0

入力として有効な郵便番号 (スペースの有無にかかわらず) を期待し、それを構成要素に分解し、適切な場所にスペースを入れてきちんとフォーマットして返します。

function parsePostcode($postcode) {
    $postcode = preg_replace('/\s*/','',strtoupper($postcode));

    $sector = substr($postcode,0,-2);
    $outcode = $district = substr($sector,0,-1);

    list($area) = sscanf($district,'%[A-Z]');
    $incode = substr($postcode,-3);

    return array(
        'postcode'  => $postcode,
        'formatted' => $outcode.' '.$incode,
        'area'      => $area,
        'district'  => $district,
        'sector'    => $sector,
        'outcode'   => $outcode,
        'incode'    => $incode,
    );
}
于 2013-02-15T21:51:58.773 に答える
0

最優先事項は、クエリから LIKE 条件を削除することです。LIKE 条件を使用すると、MySQL はテーブル内のすべての行を評価する必要があり、非常に非効率的です。どうしても必要な場合を除き、LIKE の使用は避けてください。クエリのこの部分を変更するには、次のように置き換える必要があります。

PostCode = "$Loc"

これにより、次の 2 つのオプションが提示されます。

1) 入力をサニタイズします。郵便番号はよく知られた形式に従っているため、誰かが入力した値を期待する値に変換することができます。その後、検索できます。$Loc はデータベースにあるものと正確に一致するため、データベース内で見つけるのは非常に高速です (もちろん、フィールドにインデックスを作成していることが前提です!)。

2) 同じ郵便番号を表す複数の値でデータベースをオーバーロードします。これは、「l236yt」と「l23 6yt」の両方をデータベースに入れ、それらが異なる値であるかのように処理することを意味します。これは、「l23」などの郵便番号の最初の部分だけを検索する場合にも役立ちますが、郵便番号と場所の間に 1 対多の関係がある場合にのみ機能します。

于 2013-03-05T00:58:56.143 に答える
0

データベースの値にスペースがないと仮定すると、ユーザー値をスペースのない値にサニタイズします。

$val = str_replace(' ', '', $val);
于 2013-02-15T21:46:18.823 に答える