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

Masalah bindParam PDO

PDO mengikat data nilai, bukan nama tabel dan kolom.

Anda salah memahami penggunaan binding. Anda tidak dapat mengikat nama tabel dan kolom dengan PDO. Anda mengikat data untuk memasukkan KE dalam kolom tersebut. Anda perlu membuat SQL untuk menyertakan nama tabel dan kolom menggunakan operasi string.

Memformat data

Saya telah mengganti nama $column dan $value Anda menjadi $column_array, $value_array untuk memperjelas apa itu, dan berasumsi bahwa masing-masing adalah array sederhana:$column_array = array('column1', 'column2', ...) etc.

$placeholders = array_map(function($col) { return ":$col"; }, $column_array);

$bindvalues = array_combine($placeholders , $value_array);

$placeholder sekarang terlihat seperti ini:

$placeholders = array(
        ':column1',
        ':column2',
         ...
    );

$bindvalues ​​sekarang terlihat seperti ini:

$bindvalues = array(
        ':column1'=>'value1',
        ':column2'=>'value2',
         ...
    );

Bangun, persiapkan, jalankan

$sql = $this->connect->prepare("INSERT INTO $table (" .implode(",", $column_array) .") VALUES (". implode(",", $placeholders) . ")";

Ini akan memberi Anda pernyataan yang sudah disiapkan dalam formulir:

$sql = INSERT INTO table_name (column1, column2, ...) VALUES (:column1, :column2, ...)

Anda kemudian dapat mengeksekusi pernyataan yang telah disiapkan dan meneruskan $values ​​sebagai argumen.

$sql->execute($bindValues);

Catatan:

  • Satu peringatan yang harus disebutkan. Pastikan bahwa data asli Anda telah disanitasi terhadap SQL Injection. PDO menanganinya untuk nilai terikat, tetapi jika Anda membuat kolom dari, misalnya, data $_POST, ini rentan dan perlu dibersihkan.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Adakah cara untuk memilih dari tabel MySQL di mana bidang diakhiri dengan karakter/angka tertentu?

  2. Saya ingin menambahkan 30 hari ke baris tanggal mysql

  3. PDO MySQL:Sisipkan beberapa baris dalam satu kueri

  4. C# Pengumpulan Koneksi MySQL

  5. Kolom peningkatan otomatis MySQL melonjak 10- mengapa?