Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Problem z parametrem PDO bindParam

PDO wiążą dane wartości, a nie nazwy tabel i kolumn.

Nie rozumiesz używania wiązań. Nie można powiązać nazw tabel i kolumn z PDO. Wiążesz dane, aby wstawić do tych kolumn. Musisz skonstruować kod SQL, aby zawierał nazwy tabel i kolumny za pomocą operacji na ciągach.

Sformatuj dane

Zmieniłem nazwy twoich $column i $value na $column_array, $value_array, aby było jasne, czym one są, i założyłem, że każda z nich jest prostą tablicą:$column_array = array('column1', 'column2', ...) etc.

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

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

$placeholders wygląda teraz tak:

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

$bindvalues ​​wygląda teraz tak:

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

Buduj, przygotuj, wykonaj

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

W ten sposób otrzymasz przygotowane oświadczenie w postaci:

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

Następnie możesz wykonać przygotowaną instrukcję i przekazać $wartości jako argument.

$sql->execute($bindValues);

Uwaga:

  • Jedno zastrzeżenie, o którym należy wspomnieć. Upewnij się, że oryginalne dane zostały oczyszczone przed wstrzyknięciem SQL. PDO dbają o to dla wartości powiązanych, ale jeśli konstruujesz kolumny z, powiedzmy, danych $_POST, jest to podatne na ataki i wymaga oczyszczenia.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pobieranie połączonej listy w bazie danych MySQL

  2. Jaki wzorzec projektowy wersjonowania poleciłbyś

  3. Wynik group_concat nie działa w stanie IN

  4. mysqldump Błąd 1045 Odmowa dostępu pomimo poprawnych haseł itp

  5. Dwukierunkowe szyfrowanie bazy danych bezpieczne nawet od administratora