0

データベースからドメインを取得しようとしているドメインの「有効性」(何かを作成することが許可されている場合)をチェックしているときに、URLがGET変数を介してスクリプトに到達し、データベースにクエリを実行します。

$url = $_GET['url'];             // complete url of the site like: sub1.domain.com/page/1/some
$url = parse_url($_GET['url']);  // parsing the url http://php.net/manual/en/function.parse-url.php
$host = $url['host'];            // gives me sub1.domain.com 

解析後:

$query = "SELECT * FROM domains_table WHERE domain = '" . $host . "'"; 

これはうまく機能します。domain.comには多くのサブドメインがあり、すべてのバリエーションをデータベースに保存できない場合があると思います。domain.comに30個のサブドメインがあり、sub1.domain.com sub2.domain.comなどを保存する必要がある場合、スペースが失われたように見えます...

代わりに、データベースに* .domain.comだけを保存してから、クエリまたはphpスクリプト(クエリに含まれている場合は個人用)で何らかの方法で(これがヘルプが必要な場合)、よりスマートな方法で考えていました。好み)*は任意の文字列である可能性があることを示すものを作成します。これどうやってするの?

編集:

答えには多少の混乱があるので、私は自分自身をよりよく説明しようとします。

テーブルにURLフィールドを保存している場合:*。domain1.comどうすれば次のようなものを作成できますか?

SELECT * FROM domain WHERE url LIKE "sub1.domain.com" 

何かを取得します。

4

5 に答える 5

4

MySQLのLike演算子を使用したい。

例:

SELECT * FROM table WHERE value LIKE '%string%';

は、「文字列」部分の前後の任意の文字列と一致します。

于 2013-03-21T10:52:20.773 に答える
2

%をアスタリスクとして使用できます(前後のすべてに一致します)

$query = "SELECT * FROM domains_table WHERE domain LIKE '%" . $host . "%'"; 
于 2013-03-21T10:52:11.257 に答える
0

使用できます:

WHERE domain LIKE '%" . $host . "'"
于 2013-03-21T10:52:48.793 に答える
0

1つの可能性は、ワイルドカードセレクターを使用することです。

$query = "SELECT * FROM domains_table WHERE domain LIKE '%" . $host . "'"; 

これにより、すべてのサブドメインに一致します。だからと

$host = '.domain.com';

また、すべてのサブドメインを取得します。

しかし、注意してください、それはかなり遅いです。

于 2013-03-21T10:53:20.727 に答える
0

ここでLIKEを使用できるかどうかはわかりません。ワイルドカードは、直接探しているものではなく、テーブルに格納されているデータに含まれているためです。

かなり多くの作業が必要ですが、ドメインを各セクションに分割してから、各セクション間に親子関係を持たせる方がよいでしょう。

つまり、shop.fred.comとnews.fred.comがあれば、次のようなものになります。

id  parent  section
1   NULL    com
2   1   fred
3   2   shop
4   2   news

次に、それをドリルダウンします。再帰的にクエリを実行する単純な大雑把な方法、またはネストされたsetメソッドを使用します。

于 2013-03-21T11:22:03.110 に答える