in reply to Re^2: Extract Elements from an array and insert into database
in thread Extract Elements from an array and insert into database

Ah, well then. If you have control over the delimiters, then that definitely makes things easy. Let's go with what you used there, but always use a single | to delimit fields instead of doubling it between the second and third fields (when a third field is present).

Some basic code to split all the data up and insert it into a database would look something like:

# This code assumes that you've already initialized a # database handle, $dbh, and your string of data is in # $input my $sth = $dbh->prepare('INSERT INTO my_table (field1, field2, field3) + VALUES (?, ?, ?);'); my @records = split '&', $input; foreach my $record (@records) { my @fields = split '\|', $record; $sth->execute(@fields); }
If there are only two fields in the record, the database placeholders (the ?s in the SQL text) should convert the nonexistent third element of @fields into a NULL in the database. If you get an error about not having enough values to bind, replace both occurrences of @fields with ($field1, $field2, $field3) to force it to always pass three values. (The code is untested, but simple enough that I should have gotten it right...)

Note the backslash escape in the second split. The | character is special and you'll get every character individually if you split on '|' instead of '\|'.