sql >> Base de Datos >  >> RDS >> Mysql

Apóstrofes y dos puntos en Pretty Links

En primer lugar, la idea de almacenar cadenas escapadas en la base de datos parece extraña. MySQL puede almacenar cadenas de caracteres arbitrarios e incluso puede almacenar secuencias binarias de forma segura.

Ahora sobre el mapeo de títulos reales a URL bonitas y viceversa. La idea de convertir el título en una cadena compatible con URL y luego volver no es la forma común de resolver su problema, porque es muy difícil hacer que dicha conversión sea reversible. La forma habitual de resolver este problema es tener una columna separada en la base de datos que contiene el título del libro modificado para que sea compatible con URL. También los valores en estas columnas deben ser únicos. La tabla podría verse así:

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

Debe indexar su tabla por estas columnas y usarla en lugar de book_title en consulta SQL dentro de su viewbook.php guión como este:

SELECT * FROM books WHERE book_title_url='$booktitle'

Donde $booktitle contiene el título del libro recibido a través de $_GET['booktitle'] y escapó correctamente para evitar inyecciones de SQL.

Por lo tanto, sus bonitas URL se verán como http://www.example.com/title/why-can-t-i-be-you-a-novel y Apache los reescribirá a algo como http://www.example.com/viewbook.php?booktitle=why-can-t-i-be-you-a-novel .

Nuevamente, esta es la forma común en que se implementan las URL bonitas. Espero que funcione para ti también.

Para los registros existentes, puede completar book_title_url columna por algo como esto:

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