Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Viết lại URL, thay thế ID bằng tiêu đề trong chuỗi truy vấn

Chắc chắn là có thể, đối với một tập lệnh PHP .htaccess của bạn có thể trông giống như sau:

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

Thao tác này sẽ ghi lại tất cả các URL ngoại trừ tên thư mục hoặc tệp thành "index.php? Url =THE-TYPED-ADDRESS".

Trong index.php, bạn có thể sử dụng giá trị $ _GET ['url'] để xác định 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
}

Đây rõ ràng là một ví dụ được đơn giản hóa quá mức và bạn thực sự nên đảm bảo rằng mình thoát đúng cách và sử dụng các câu lệnh đã chuẩn bị để tránh rủi ro bảo mật. Ngoài ra, nếu bạn sử dụng MySQLi hoặc một lớp truy cập cơ sở dữ liệu khác, mã chuẩn bị / thực thi / tìm nạp của bạn sẽ thay đổi một chút.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Truy xuất ghi chú mới nhất (theo dấu thời gian) trong một truy vấn duy nhất từ ​​bảng 1:n

  2. Laravel gặp sự cố Docker kết nối MySQL

  3. Tự động thêm các chữ cái vào trước một fieild tăng dần tự động

  4. Sử dụng lớp cơ sở dữ liệu Django bên ngoài Django?

  5. Lưu trữ mảng byte Mysql