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

wartości bind INSERT INTO mysql perl

Powinieneś dostarczyć listę argumentów, po jednym dla każdego znaku zapytania, a nie pojedynczego argumentu skalarnego zawierającego ciągi argumentów. Kiedy odpowiedziałem na Twoje pytanie wcześniej kazałem ci zrobić:

my @values = map param($_), @account_field_order; # add values to array
push @values, $status;                  # for simplicity
$new_row = join ", ", ("?") x @values;  # add ? for each value

... # basically same code as before, except the execute statement:

$sth->execute(@values);      # arguments given will be inserted at placeholders

Gdzie $new_row jest twoim zastępczym łańcuchem, a nie twoją listą argumentów. Nie:

$new_row .= "'" . param($field) . "', ";
...
$new_row .= "'$status'";
$sth->execute(qq($new_row)) or die $DBI::errstr;

Ponieważ $new_row liczy się jako jeden argument, ponieważ jest skalarem. Potrzebujesz tablicy lub listy o tej samej długości, co liczba znaków zapytania.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL:Jak wykonać ciąg znaków nie jest równy

  2. Użyj Javy do zdalnego tworzenia kopii zapasowych bazy danych MySQL

  3. Błąd krytyczny:wywołanie niezdefiniowanej funkcji:MDB2_Driver_MYSQL::getAll()

  4. pobieranie wartości, które nie istnieją w tabeli mysql

  5. Wstaw wiersz i unikaj wyścigu (PHP/MySQL)