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

Saya memiliki array bilangan bulat, bagaimana cara menggunakan masing-masing dalam kueri mysql (dalam php)?

Seperti hampir semua pertanyaan "Bagaimana saya melakukan SQL dari dalam PHP" - Anda sangat harus menggunakan pernyataan yang disiapkan. Tidak sulit kok :

$ids  = array(2, 4, 6, 8);

// prepare an SQL statement with a single parameter placeholder
$sql  = "UPDATE MyTable SET LastUpdated = GETDATE() WHERE id = ?";
$stmt = $mysqli->prepare($sql);

// bind a different value to the placeholder with each execution
for ($i = 0; $i < count($ids); $i++)
{
    $stmt->bind_param("i", $ids[$i]);
    $stmt->execute();
    echo "Updated record ID: $id\n";
}

// done
$stmt->close();

Atau, Anda dapat melakukannya seperti ini:

$ids    = array(2, 4, 6, 8);

// prepare an SQL statement with multiple parameter placeholders
$params = implode(",", array_fill(0, count($ids), "?"));
$sql    = "UPDATE MyTable SET LastUpdated = GETDATE() WHERE id IN ($params)";
$stmt   = $mysqli->prepare($sql);

// dynamic call of mysqli_stmt::bind_param                    hard-coded eqivalent
$types = str_repeat("i", count($ids));                        // "iiii"
$args = array_merge(array($types), $ids);                     // ["iiii", 2, 4, 6, 8]
call_user_func_array(array($stmt, 'bind_param'), ref($args)); // $stmt->bind_param("iiii", 2, 4, 6, 8)

// execute the query for all input values in one step
$stmt->execute();

// done
$stmt->close();
echo "Updated record IDs: " . implode("," $ids) ."\n";

// ----------------------------------------------------------------------------------
// helper function to turn an array of values into an array of value references
// necessary because mysqli_stmt::bind_param needs value refereces for no good reason
function ref($arr) {
    $refs = array();
    foreach ($arr as $key => $val) $refs[$key] = &$arr[$key];
    return $refs;
}

Tambahkan lebih banyak placeholder parameter untuk bidang lain sesuai kebutuhan Anda.

Yang mana yang harus dipilih?

  • Varian pertama bekerja dengan sejumlah variabel catatan secara iteratif, mengenai database beberapa kali. Ini paling berguna untuk operasi UPDATE dan INSERT.

  • Varian kedua juga berfungsi dengan sejumlah catatan variabel, tetapi hanya menyentuh database sekali. Ini jauh lebih efisien daripada pendekatan berulang, jelas Anda hanya dapat melakukan hal yang sama untuk semua catatan yang terpengaruh. Ini paling berguna untuk operasi SELECT dan DELETE, atau saat Anda ingin MEMPERBARUI beberapa record dengan data yang sama.

Mengapa pernyataan yang disiapkan?

  • Pernyataan yang disiapkan jauh lebih aman karena membuat serangan injeksi SQL menjadi tidak mungkin. Ini adalah alasan utama untuk menggunakan pernyataan yang sudah disiapkan, bahkan jika lebih banyak pekerjaan untuk menulisnya. Kebiasaan yang masuk akal untuk dilakukan adalah:Selalu gunakan pernyataan yang sudah disiapkan, bahkan jika menurut Anda itu "tidak terlalu diperlukan". Pengabaian akan datang dan menggigit Anda (atau pelanggan Anda).
  • Menggunakan kembali pernyataan siap yang sama beberapa kali dengan nilai parameter yang berbeda lebih efisien daripada mengirim beberapa string SQL lengkap ke database, karena database hanya perlu mengkompilasi pernyataan sekali dan dapat menggunakannya kembali juga.
  • Hanya nilai parameter yang dikirim ke database di execute() , jadi lebih sedikit data yang perlu ditransfer saat digunakan berulang kali.

Dalam loop yang lebih panjang, perbedaan waktu eksekusi antara menggunakan pernyataan yang disiapkan dan mengirim SQL biasa akan terlihat.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hitung selisih waktu antara dua baris

  2. Bagaimana cara memasukkan file BLOB dan CLOB di MySQL?

  3. MySQL - Bagaimana cara melepaskan kolom ke baris?

  4. Memuat file .sql dari dalam PHP

  5. Cara Mengganti Nama Database di MySQL