cari

Rumah  >  Soal Jawab  >  teks badan

Dapatkan metadata set hasil daripada pangkalan data tanpa mengetahui pernyataan SQL

<p>Saya menggunakan PHP dan HTML dan mencipta pangkalan data. Saya disambungkan ke pangkalan data. Saya tertanya-tanya sama ada terdapat cara untuk mendapatkan semula data daripada pangkalan data dengan meminta pengguna memasukkan keseluruhan pernyataan SQL. Saya sangat berminat dengan cara mendapatkan data tanpa menyebut $row['id']</p> <p>Demi hujah, mereka akan mengetahui lajur dan ID serta segala-galanya tentang pangkalan data. </p> <p>Semua yang saya lihat ialah anda perlu mengetahui lajur yang sedang disoal sebelum anda boleh mengakses data. </p>
P粉506963842P粉506963842436 hari yang lalu528

membalas semua(1)saya akan balas

  • P粉674757114

    P粉6747571142023-09-05 11:18:10

    Jika pengguna anda ingin menyediakan pernyataan SQL untuk digunakan, mereka mesti tahu nama jadual dan lajur yang mereka mahukan.

    Anda boleh bertanya information_schema.COLUMNSjadual untuk mencari nama jadual dan lajur serta jenis data.

    Sebagai alternatif, selepas melaksanakan pertanyaan, anda boleh mendapatkan metadata lajur. Untuk PDO, gunakan $stmt->getColumMeta($columnNumber);. Menggunakan mysqli gunakan ->result_metadata() seperti ini (tidak debug).

    $stmt = $mysqli->prepare("SELECT what,ever,else FROM table");
    $stmt->execute();
    $metadata = $stmt->result_metadata();
    $column_count = $mysqli->field_count();
    $column_names = [];
    for ($colnum = 0; $colnum < $column_count; $colnum++) {
        $field = $metadata->fetch_field();
        $column_names [] = $field->name;
    }
    $metadata->close();
    

    Ini menggunakan ->fetch_field() untuk mendapatkan banyak maklumat berguna tentang setiap lajur dalam set hasil.

    Tetapi meminta pengguna untuk memberikan anda pernyataan SQL adalah risiko keselamatan yang besar. Jika anda mempercayai pengguna untuk memberikan anda pernyataan SQL, anda juga mesti mempercayai mereka untuk tidak merosakkan atau merosakkan data anda. Jika sistem anda terbuka kepada internet global, anda akan kehilangan data. Kadang-kadang orang bertanya kepada saya bagaimana saya tahu ini.

    balas
    0
  • Batalbalas