Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Apóstrofos e dois pontos em Pretty Links


Em primeiro lugar, a ideia de armazenar strings com escape no banco de dados parece estranha. O MySQL é capaz de armazenar strings de caracteres arbitrários e até mesmo armazenar sequências binárias com segurança.

Agora sobre o mapeamento de títulos reais para URLs bonitos e vice-versa. A ideia de converter o título em uma string amigável ao URL e depois voltar não é a maneira comum de resolver seu problema, porque é muito difícil tornar essa conversão reversível. A maneira usual de resolver esse problema é ter uma coluna separada no banco de dados que contém o título do livro modificado para ser amigável ao URL. Além disso, os valores nestas colunas devem ser exclusivos. A tabela poderia ficar assim:
+-----+-----------------------------+----------------------------+
| BID | book_title                  | book_title_url             |
+-----+-----------------------------+----------------------------+
|   1 | Why Can't I Be You: A Novel | why-can-t-i-be-you-a-novel |
+-----+-----------------------------+----------------------------+

Você deve indexar sua tabela por essas colunas e usá-la em vez de book_title na consulta SQL dentro do seu viewbook.php roteiro assim:
SELECT * FROM books WHERE book_title_url='$booktitle'

Onde $booktitle contém o título do livro recebido via $_GET['booktitle'] e escapou corretamente para evitar injeções de SQL.

Assim, seus lindos URLs serão parecidos com http://www.example.com/title/why-can-t-i-be-you-a-novel e eles serão reescritos pelo Apache para algo como http://www.example.com/viewbook.php?booktitle=why-can-t-i-be-you-a-novel .

Novamente, essa é a maneira comum de como as URLs bonitas geralmente são implementadas. espero que funcione para você também.

Para registros existentes, você pode preencher book_title_url coluna por algo assim:
UPDATE books SET book_title_url=REPLACE(REPLACE(REPLACE(book_title, " ", "-"), ":", "-"), "'", "-");