Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Czy możliwe jest zapytanie bazy danych przy użyciu wartości przekazanej w adresie URL i zapisanie wyniku zapytania w adresie URL za pomocą mod_rewrite?

Jest to możliwe, ale musisz użyć RewriteMap aby zdefiniować mapowanie, którego możesz użyć w RewriteRule .

Apache w wersji 2.2 nie ma bezpośredniego dostępu do bazy danych, więc musisz napisać skrypt, który wykona zapytanie, a następnie zwróci wynik. Możesz zdefiniować tę mapę za pomocą „Zewnętrznego programu przepisywania” .

Więc jeśli masz skrypt, który pobiera „cats” ze standardowego wejścia, a następnie wysyła zapytanie do bazy danych i zwraca „1”, zdefiniujesz go w ten sposób:

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

Ta dyrektywa musi znajdować się w konfiguracji twojego serwera lub vhosta, nie może być w pliku htaccess. Ale możesz użyć mapowania w pliku htaccess:

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

To wymaga identyfikatora URI /cats i przepisuje to do /item.php?id=1 .

Jeśli używasz Apache 2.4, możesz skorzystać z " DBD" mapa . Możesz wstawić zapytanie bezpośrednio do definicji mapy, pomijając konieczność użycia zewnętrznego skryptu. Używałbyś go w ten sam sposób.

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

Następnie użyj go w ten sam sposób:

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

Bez użycia zapytania DBD/FastDBD, myślę, że naprawdę lepiej jest po prostu przeszukać bazę danych z item.php , ponieważ i tak byś zduplikował całą tę pracę w drugim zewnętrznym skrypcie. Po prostu dodaj coś takiego:

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]

I w twoim item.php skrypt, sprawdź oba id i imię . Jeśli masz imię , wykonaj wyszukiwanie w bazie danych, aby zmienić to na identyfikator. Jest o wiele łatwiejszy w zarządzaniu, nie musisz mieć dostępu do konfiguracji serwera/vhosta i nie komplikujesz sprawy, używając mapy przepisywania.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Korzystanie z SQL JOIN i COUNT

  2. Co muszę zrobić, aby otwierać adresy URL ze znakami specjalnymi

  3. MySQL łączy tabele, w których nazwa tabeli jest polem innej tabeli

  4. mysql concat_ws bez duplikatów

  5. wybierz tylko wtedy, gdy inna wartość