Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Apakah mungkin untuk meminta database menggunakan nilai yang diteruskan dalam URL, dan menulis hasil kueri ke URL menggunakan mod_rewrite?

Itu mungkin, tetapi Anda perlu menggunakan RewriteMap untuk menentukan pemetaan yang dapat Anda gunakan dalam RewriteRule .

Apache versi 2.2 tidak memiliki akses database langsung sehingga Anda harus menulis skrip yang melakukan kueri sebenarnya lalu mengembalikan hasilnya. Anda dapat menentukan peta ini menggunakan "Program Penulisan Ulang Eksternal" .

Jadi, jika Anda memiliki skrip yang mengambil "cats" dari stdin, lalu menanyakan database, dan mengembalikan "1", Anda akan mendefinisikannya seperti ini:

RewriteMap item_lookup prg:/path/to/item_lookup.php

Arahan itu harus ada di server atau konfigurasi vhost Anda, tidak boleh di file htaccess. Tetapi Anda dapat menggunakan pemetaan dalam file htaccess:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /item.php?id=${item_lookup:$1} [L]

Jadi ini mengambil URI /cats dan menulis ulang ke /item.php?id=1 .

Jika Anda menggunakan Apache 2.4, maka Anda dapat memanfaatkan " Peta DBD" . Anda dapat memasukkan kueri langsung ke definisi peta, tanpa harus menggunakan skrip eksternal. Anda akan menggunakannya dengan cara yang sama.

RewriteMap item_lookup "fastdbd:SELECT id FROM items WHERE name = %s"

Kemudian gunakan dengan cara yang sama:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /item.php?id=${item_lookup:$1} [L]

Tanpa menggunakan kueri DBD/FastDBD, saya pikir Anda lebih baik melakukan pencarian basis data dari item.php , karena Anda akan menduplikasi semua pekerjaan itu dalam skrip eksternal kedua. Cukup tambahkan sesuatu seperti:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^item/([0-9]+)$ /item.php?id=$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([A-Za-z0-9-]+)$ /item.php?name=$1 [L]

Dan di item.php . Anda skrip, periksa keduanya id dan nama . Jika Anda memiliki nama , lakukan pencarian basis data untuk mengubahnya menjadi id. Jauh lebih mudah untuk mengelolanya, Anda tidak perlu memiliki akses konfigurasi server/vhost, dan Anda tidak memperumit masalah dengan menggunakan peta penulisan ulang.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL KIRI GABUNG beberapa tabel masalah logika

  2. aws - ec2 - mysql - instance stop, reboot - kata sandi pengguna lain diubah

  3. Tidak bisa mendapatkan pengkodean dengan benar di MySQL

  4. Bagaimana saya bisa meniru WHERE 1 dalam kueri dinamis?

  5. Tidak Dapat Terhubung ke RDS mysql DB dari Wordpress di Amazon linux EC2 Instance