Mysql
 sql >> база данни >  >> RDS >> Mysql

Проблем с PDO bindParam

PDO свързват стойностни данни, а не имена на таблици и колони.

Погрешно разбирате използването на обвързвания. Не можете да свързвате имена на таблици и колони с PDO. Обвързвате данни, за да вмъкнете В тези колони. Трябва да конструирате SQL, за да включите имената на таблиците и колоните, като използвате низови операции.

Форматирайте данните

Преименувах вашите $column и $value на $column_array, $value_array, за да стане ясно какво представляват, и предположих, че всеки е прост масив:$column_array = array('column1', 'column2', ...) etc.

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

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

$placeholders сега изглежда така:

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

$bindvalues ​​сега изглежда така:

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

Създайте, подгответе, изпълнете

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

Това ще ви даде подготвено изявление във формата:

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

След това можете да изпълните подготвения оператор и да предадете $values ​​като аргумент.

$sql->execute($bindValues);

Забележка:

  • Едно предупреждение, което трябва да се спомене. Уверете се, че оригиналните ви данни са дезинфекцирани срещу SQL инжекция. PDO се грижат за това за свързаните стойности, но ако конструирате колоните от, да речем, $_POST данни, това е уязвимо и трябва да бъде дезинфекцирано.


  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 на Ubuntu без подкана за парола

  2. MySQL DB избира записи със и без умлаути. напр.:'.. където нещо =FÖÖ'

  3. Предоставяне на множество бази данни. MySQL

  4. създаване на списък с приятели в mysql

  5. Наистина ли имате нужда от пул за връзка с db за unicorn релси?