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

Bagaimana cara memasukkan array ke mysql menggunakan PDO dan bindParam?

Anda mencoba membuat pernyataan dan mengikat param.

Pernyataan sangat bagus karena berpotensi meniadakan segala jenis injeksi SQL. Dan itu dilakukan dengan menghapus konsep kueri yang hanya dilihat sebagai string. Kueri SQL dilihat sebagai string dengan daftar parameter dan data terkait sebagai variabel terikat. Jadi, kueri tidak hanya teks, tetapi teks + data.

maksud saya:

Kueri sederhana ini:

SELECT * FROM A WHERE val="$param"

Ini tidak aman karena kueri hanya dilihat sebagai string. Dan jika $param tidak dicentang, itu adalah lubang SQLi.

Tetapi saat membuat pernyataan, kueri Anda menjadi:

SELECT * FROM A WHERE val=:param

Kemudian Anda menggunakan bindparam untuk menentukan nilai a :param. Artinya, nilainya tidak ditambahkan ke string kueri, tetapi kueri sudah diurai dan data disediakan.

Dalam kasus Anda, Anda mengikat ke param :array array yang meledak (saya berasumsi "data1", "data2", dll.). Yang mana hanya satu parameter dengan nilai berupa string ( "data1, data2, data3..." ), sehingga hanya akan menghasilkan satu sisipan dan bukan beberapa sisipan.

Anda dapat mengubah pembuatan pernyataan dengan membuat kueri dengan parameter yang cukup untuk menangani larik Anda

$sql = "INSERT INTO qresults (instance, qid, result) VALUES ( :val0, :val1, :val2, ...)";

Kemudian loop pada array Anda dan panggil metode bindparam untuk setiap parameter.

$count = 0;
foreach($values as $val)
{
   $stmt->bindParam(":val$count", $val,PDO::PARAM_STR);
   $count++;

}

Ini akan berhasil.

Sunting :Solusi ini menunjukkan cara kerjanya untuk array satu dimensi, tetapi dapat dengan mudah diperluas ke masalah Anda dengan mengubah pembuatan kueri pernyataan dan memodifikasi loop bindparam.

Pernyataan Anda akan terlihat seperti:

$sql = "INSERT INTO qresults (instance, qid, result) VALUES (:val0, :val1, :val2) , (:val3, :val4, :val5), ...";

Anda hanya perlu menghitung jumlah elemen dalam larik dasar Anda.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mysql bergabung dengan kueri untuk beberapa tag (hubungan banyak ke banyak) yang cocok dengan SEMUA tag?

  2. Tangani restart mysql di SQLAlchemy

  3. MYSQL tidak menambahkan info ke database saya

  4. MySql menggabungkan LIMIT dan ORDER BY

  5. membuat nomor acak menggunakan MYSQL