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

Apostrofy i dwukropki w ładnych linkach

Przede wszystkim dziwnie wygląda pomysł przechowywania znaków ucieczki w bazie danych. MySQL jest w stanie przechowywać ciągi dowolnych znaków, a nawet może bezpiecznie przechowywać sekwencje binarne.

Teraz o mapowaniu z prawdziwych tytułów do ładnych adresów URL iz powrotem. Pomysł, aby przekonwertować tytuł na ciąg znaków przyjazny dla adresu URL, a następnie z powrotem, nie jest powszechnym sposobem rozwiązania problemu, ponieważ bardzo trudno jest przywrócić taką konwersję. Zwykłym sposobem rozwiązania tego problemu jest posiadanie w bazie danych osobnej kolumny zawierającej tytuł książki zmodyfikowany tak, aby był przyjazny dla adresu URL. Również wartości w tych kolumnach powinny być unikatowe. Tabela może wyglądać tak:

+-----+-----------------------------+----------------------------+
| BID | book_title                  | book_title_url             |
+-----+-----------------------------+----------------------------+
|   1 | Why Can't I Be You: A Novel | why-can-t-i-be-you-a-novel |
+-----+-----------------------------+----------------------------+

Powinieneś zindeksować swoją tabelę według tych kolumn i użyć jej zamiast book_title w zapytaniu SQL w twoim viewbook.php skrypt taki:

SELECT * FROM books WHERE book_title_url='$booktitle'

Gdzie $booktitle zawiera tytuł książki otrzymany przez $_GET['booktitle'] i prawidłowo uciekł, aby zapobiec wstrzykiwaniu SQL.

Twoje ładne adresy URL będą więc wyglądać tak:http://www.example.com/title/why-can-t-i-be-you-a-novel i zostaną przepisane przez Apache na coś takiego jak http://www.example.com/viewbook.php?booktitle=why-can-t-i-be-you-a-novel .

Ponownie, jest to typowy sposób implementacji ładnych adresów URL. mam nadzieję, że to zadziała również dla Ciebie.

Dla istniejących rekordów możesz wypełnić book_title_url kolumna przez coś takiego:

UPDATE books SET book_title_url=REPLACE(REPLACE(REPLACE(book_title, " ", "-"), ":", "-"), "'", "-");


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. JDBC z MySQL jest naprawdę wolny, nie wiem dlaczego

  2. Ado Entity:Traktuj Tiny'ego jako Boole'a =false

  3. Jak zidentyfikować język w kolumnie utf-8 w MySQL?

  4. myisam umieścić blokadę tabeli na stole, nawet gdy mamy do czynienia z zapytaniem „wybierz”?

  5. MySQL Pobiera czas starego wstawienia rekordu?