Bolehkah saya Mengikat Pengecam dan Kata Kunci dalam Penyata Disediakan PHP PDO?

Mary-Kate Olsen
Lepaskan: 2024-11-24 11:34:10
asal
965 orang telah melayarinya

Can I Bind Identifiers and Keywords in PHP PDO Prepared Statements?

Mengikat Pengecam dan Kata Kunci Sintaks dalam PHP PDO Penyata Disediakan

Pertanyaan dinamik membenarkan operasi pangkalan data yang fleksibel dengan menggunakan pembolehubah untuk menentukan nama jadual, lajur nama, dan nilai carian. Walau bagaimanapun, pengecam yang mengikat (nama jadual atau medan) atau kata kunci sintaks menggunakan pernyataan PDO yang disediakan boleh membawa kepada hasil yang tidak dijangka.

Isu:

Apabila menggunakan bindParam() atau bindValue () untuk mengikat pembolehubah yang mewakili pengecam atau kata kunci sintaks, tatasusunan kosong dikembalikan dan bukannya yang dijangkakan keputusan pangkalan data.

Penjelasan:

Pernyataan yang disediakan PDO boleh mengikat literal data sahaja. Oleh itu, percubaan untuk mengikat pengecam atau kata kunci tidak akan menghasilkan hasil yang diingini.

Penyelesaian:

Untuk mencipta pertanyaan dinamik yang selamat dan boleh dipercayai, adalah penting untuk:

  • Formatkan pengecam dengan betul: Sertakan pengecam dalam backtick (') dan lepaskan backtick di dalam dengan menggandakannya (```).
  • Gunakan senarai putih: Sahkan pengecam dinamik terhadap senarai berkod keras bagi nilai yang dibenarkan untuk mengelakkan kemungkinan suntikan.
  • Gunakan peraturan yang sama pada kata kunci sintaks: Senarai putih dan sahkan semua kata kunci sintaks yang digunakan dalam pertanyaan dinamik.

Contoh Kod:

Untuk memformat dan mengesahkan pengecam:

$field = "`" . str_replace("`", "``", $field) . "`";
Salin selepas log masuk

Untuk menyenarai putih dan sahkan kata kunci:

$dir = $_GET['dir'] == 'DESC' ? 'DESC' : 'ASC'; 
Salin selepas log masuk

Kemudian, masukkan pembolehubah yang telah dibersihkan dalam yang disediakan pernyataan:

$stmt = $db->prepare('
    SELECT 
        * 
    FROM 
        ?
    WHERE 
        ? LIKE ?
');
$stmt->bindParam(1, $searchTable);
$stmt->bindParam(2, $searchBy);
$stmt->bindValue(3, '%' . $searchTerm . '%');
Salin selepas log masuk

Dengan mematuhi peraturan ini, anda boleh memastikan kesahihan dan keselamatan pertanyaan pangkalan data dinamik anda.

Atas ialah kandungan terperinci Bolehkah saya Mengikat Pengecam dan Kata Kunci dalam Penyata Disediakan PHP PDO?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan