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

Przepisz adres URL, zastępując ID tytułem w ciągu zapytania

Pewnie jest to możliwe, dla skryptu PHP twój .htaccess może wyglądać mniej więcej tak:

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>

Spowoduje to przepisanie wszystkich adresów URL z wyjątkiem nazw katalogów lub plików na „index.php?url=WPISANY-ADRES”.

W swoim index.php możesz następnie użyć wartości $_GET['url'] do określenia identyfikatora:

// init DB layer
if (isset($_GET['url']) && !empty($_GET['url'])) {
  $url = my_filter_function($_GET['url']); // filter input
  $pdo = my_get_pdo_function(); // get configured PDO objected
  $query = "SELECT id FROM my_router_table WHERE url = ? LIMIT 1"; // use prepared statements for security/performance reasons

  $stmt = $pdo->prepare($query);
  $stmt->bindValue(1, $url, PDO::PARAM_STR); // bind the value as a string

  // ternary operator expanded for readability
  if ($stmt->execute()) {
    $id = $stmt->fetch(PDO::FETCH_ASSOC);
  } else {
    $id = -1; // 404 page
  }

  // fetch content/render page according to ID
}

Jest to oczywiście zbyt uproszczony przykład i powinieneś naprawdę upewnić się, że właściwie unikasz swoich danych wejściowych i używasz przygotowanych instrukcji, aby uniknąć zagrożeń bezpieczeństwa. Ponadto, jeśli używasz MySQLi lub innej warstwy dostępu do bazy danych, Twój kod przygotowania/wykonania/pobrania będzie się nieznacznie różnić.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zapytanie MySQL, MAX() + GROUP BY

  2. MySQL średnio co 4 wiersze

  3. Czy bezpieczne jest przechowywanie haseł w postaci zwykłego tekstu w MySQL *tymczasowo*?

  4. Aliasowanie nazw pól w modelu SQLAlchemy lub bazowej tabeli SQL

  5. Konwertuj sortowanie kolumn na domyślną tabelę/bazę danych