sql >> Databasteknik >  >> RDS >> Mysql

Skriv om URL, ersätt ID med titel i frågesträngen

Visst är det möjligt, för ett PHP-skript kan din .htaccess se ut ungefär så här:

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

Detta kommer att skriva om alla webbadresser utom katalog- eller filnamn till "index.php?url=THE-TYPED-ADDRESS".

I din index.php kan du sedan använda värdet $_GET['url'] för att bestämma ID:

// 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
}

Detta är uppenbarligen ett alltför förenklat exempel och du bör verkligen se till att du undviker din input på rätt sätt och använder förberedda uttalanden för att undvika säkerhetsrisker. Dessutom, om du använder MySQLi eller ett annat lager för databasåtkomst kommer din förberedelse/kör/hämta kod att variera något.



  1. Hur man hanterar processer på serversidan med MySQL

  2. PHP MySQL - För varje 6 rader infoga en div?

  3. SQLite ingen sådan kolumn

  4. Är hakparenteser giltiga i en SQL-fråga?