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

Apostrofy a dvojtečky v Pretty Links

Za prvé, nápad ukládat uniklé řetězce do databáze vypadá divně. MySQL je schopno ukládat řetězce libovolných znaků a dokonce může bezpečně ukládat binární sekvence.

Nyní o mapování ze skutečných názvů na pěkné adresy URL a zpět. Myšlenka převést název na řetězec vhodný pro URL a poté zpět není běžným způsobem řešení vašeho problému, protože je velmi obtížné provést takový převod zpět. Obvyklým způsobem, jak tento problém vyřešit, je mít v databázi samostatný sloupec obsahující název knihy upravený tak, aby vyhovoval URL. Také hodnoty v těchto sloupcích by měly být jedinečné. Tabulka může vypadat takto:

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

Měli byste indexovat tabulku podle těchto sloupců a používat ji namísto book_title v dotazu SQL ve vašem viewbook.php skript takto:

SELECT * FROM books WHERE book_title_url='$booktitle'

Kde $booktitle obsahuje název knihy přijatý prostřednictvím $_GET['booktitle'] a správně escapován, aby se zabránilo injekcím SQL.

Vaše hezké adresy URL tedy budou vypadat jako http://www.example.com/title/why-can-t-i-be-you-a-novel a Apache je přepíše na něco jako http://www.example.com/viewbook.php?booktitle=why-can-t-i-be-you-a-novel .

Opět je to běžný způsob, jak jsou obvykle implementovány hezké adresy URL. doufám, že to bude fungovat i vám.

Pro existující záznamy můžete vyplnit book_title_url sloupec něčím takovým:

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


  1. Může MySQL používat indexy, když mezi podmínkami existuje NEBO?

  2. Jak získat řádek v SQLite podle indexu (ne podle id)

  3. Python Pandas to_sql, jak vytvořit tabulku s primárním klíčem?

  4. MySQL RAND() jak často ji lze používat? používá /dev/random?