Cara memformat kutipan dalam kueri PostgreSQL dari skrip bash
Saya mencoba untuk mengkueri pod kubernetes Postgres menggunakan skrip bash di mana saya ingin mengizinkan pengguna untuk memasukkan variabel dan kemudian menggunakan variabel itu untuk melakukan kueri. Skrip bash saya adalah sebagai berikut:
#!/bin/bash
echo "give a last name"
read t
kubectl exec -it postgres-pod -- bash -c "psql -U postgres -c 'Select * from users WHERE last_name=\"$t\"'"
Saya telah mencoba semua kombinasi tanda kutip tunggal dan ganda tetapi saya tidak dapat memberikan nama pengguna tipe string. Setiap saran akan dihargai
Jawaban
Solusinya sederhana, tapi buruk
bash -c "psql -U postgres -c \"Select * from users WHERE last_name='$t'\""
Ini mendapatkan kutipan yang benar, tetapi rentan terhadap injeksi SQL. Bagaimana jika variabel tberisi nilai dengan satu kutipan?
Berurusan dengan itu tidak sesederhana itu; satu-satunya cara yang bisa saya pikirkan adalah menggunakan psqlvariabel seperti ini:
echo "Select * from users WHERE last_name = :'var'" | bash -c "psql -U postgres -v var=\"$t\""
Tidak yakin mengapa Anda perlu pesta, haruskah ini berfungsi?
kubectl exec -it postgres-pod -- psql -U postgres -c "SELECT * FROM users WHERE last_name='$t';"
saya menyelesaikannya menggunakan jawaban @James Brown di atas:
bash -c "psql -U postgres -c \"Select * from users WHERE last_name='$t';\""