Mysql
 sql >> Database >  >> RDS >> Mysql

Apostrofi e due punti in Pretty Links

Prima di tutto, l'idea di memorizzare le stringhe di escape nel database sembra strana. MySQL è in grado di memorizzare stringhe di caratteri arbitrari e persino di memorizzare in modo sicuro sequenze binarie.

Ora sulla mappatura da titoli reali a URL graziosi e ritorno. L'idea di convertire il titolo in una stringa compatibile con gli URL e poi tornare indietro non è il modo comune per risolvere il tuo problema, perché è molto difficile rendere reversibile tale conversione. Il modo usuale per risolvere questo problema è avere una colonna separata nel database che contiene il titolo del libro modificato per essere compatibile con gli URL. Anche i valori in queste colonne devono essere resi univoci. La tabella potrebbe assomigliare a questa:

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

Dovresti indicizzare la tua tabella in base a queste colonne e usarla al posto di book_title nella query SQL all'interno del tuo viewbook.php script come questo:

SELECT * FROM books WHERE book_title_url='$booktitle'

Dove $booktitle contiene il titolo del libro ricevuto tramite $_GET['booktitle'] ed è stato eseguito correttamente l'escape per prevenire le iniezioni SQL.

Quindi i tuoi bei URL assomiglieranno a http://www.example.com/title/why-can-t-i-be-you-a-novel e verranno riscritti da Apache in qualcosa come http://www.example.com/viewbook.php?booktitle=why-can-t-i-be-you-a-novel .

Ancora una volta, questo è il modo comune con cui vengono solitamente implementati gli URL graziosi. spero che funzioni anche per te.

Per i record esistenti puoi compilare book_title_url colonna da qualcosa del genere:

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