Rumah  >  Artikel  >  pangkalan data  >  Bolehkah saya Mengikat Pengecam dan Kata Kunci dalam Penyata Disediakan PHP PDO?

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

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-24 11:34:10967semak imbas

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) . "`";

Untuk menyenarai putih dan sahkan kata kunci:

$dir = $_GET['dir'] == 'DESC' ? 'DESC' : 'ASC'; 

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 . '%');

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!

Kenyataan:
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