sql >> Databáze >  >> RDS >> Mysql

Je možné dotazovat databázi pomocí hodnoty předané v URL a zapsat výsledek dotazu na URL pomocí mod_rewrite?

Je to možné, ale musíte použít RewriteMap k definování mapování, které můžete použít v rámci RewriteRule .

Apache verze 2.2 nemá přímý přístup k databázi, takže budete muset napsat skript, který provede skutečný dotaz a vrátí výsledek. Tuto mapu můžete definovat pomocí "Externí program pro přepisování" .

Takže pokud máte skript, který bere "cats" ze stdin, pak se dotazuje na databázi a vrací "1", definovali byste to takto:

RewriteMap item_lookup prg:/path/to/item_lookup.php

Tato direktiva musí být v konfiguraci serveru nebo vhost, nemůže být v souboru htaccess. Ale můžete použít mapování v souboru htaccess:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /item.php?id=${item_lookup:$1} [L]

Takže to trvá URI /cats a přepíše to na /item.php?id=1 .

Pokud používáte apache 2.4, můžete využít " DBD" map . Dotaz můžete vložit přímo do definice mapy, aniž byste museli používat externí skript. Použili byste ho stejným způsobem.

RewriteMap item_lookup "fastdbd:SELECT id FROM items WHERE name = %s"

Poté jej použijte stejným způsobem:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /item.php?id=${item_lookup:$1} [L]

Bez použití dotazu DBD/FastDBD si myslím, že je pro vás upřímně lepší provést vyhledání databáze z item.php , protože byste stejně veškerou práci duplikovali v druhém externím skriptu. Stačí přidat něco jako:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^item/([0-9]+)$ /item.php?id=$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([A-Za-z0-9-]+)$ /item.php?name=$1 [L]

A ve vašem item.php skript, zkontrolujte obě id a jméno . Pokud máte jméno , proveďte vyhledávání v databázi, abyste to převedli na id. Je to mnohem jednodušší na správu, nepotřebujete mít přístup ke konfiguraci serveru/vhost a nekomplikujete věci používáním přepisovací mapy.




  1. Jak můžeme sloučit dvě databáze s identickými schématy?

  2. MySQL PDO připraveno rychleji než dotaz? To ukazuje tento jednoduchý test

  3. Proč kontrola null zpomaluje tento dotaz?

  4. Jak agregovat odpovídající páry do připojených komponent v Pythonu