Font
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]3430[/thread]

wieso meldet INSERT 'nen syntax-error ???



<< >> 10 entries, 1 page
kolla
 2004-04-01 11:45
#31954 #31954
User since
2004-03-25
12 articles
BenutzerIn
[default_avatar]
Hallo Gemeinde,

hat jemand 'ne Ahnung wieso MYSQL 'nen Syntax Error bei
INSERT meldet.
Die Struktur von beiden Tabellen ist identisch.
Im Array "Zeile" sind die Daten doch genauso drin - wie sie in der dat1
liegen - also müsste doch auch INSERT schreiben können???


Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
$sth = $dbh->prepare(" SELECT * FROM dat1 ORDER BY id LIMIT 15 " );
$sth->execute();
$dat = $sth->fetchall_arrayref();
$sth->finish();
foreach (@$dat)
{
@zeile = @{$dat->[$i++]};
print " Zeile: $i : @zeile \n";
}
#nur letzte Zeile einfügen
$sql = qq{ INSERT INTO dat2  VALUES @zeile };
$sth = $dbh->do($sql);


Grüße  Walter
renee
 2004-04-01 11:55
#31955 #31955
User since
2003-08-04
14371 articles
ModeratorIn
[Homepage] [default_avatar]
Ist in der Zeile, die Du einfügen willst vielleicht ein ' ??

Hast Du es mal so probiert:
Code: (dl )
1
2
3
4
5
[...]
$sql = qq{ INSERT INTO dat2  VALUES (?)};
$sth = $dbh->prepare($sql);
$sth->execute(@zeile);
[...]
\n\n

<!--EDIT|renee|1080806132-->
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
kolla
 2004-04-01 12:05
#31956 #31956
User since
2004-03-25
12 articles
BenutzerIn
[default_avatar]
Quote
renee,01.04.2004, 09:55]Ist in der Zeile, die Du einfügen willst vielleicht ein ' ??

hmm, ich habe date & time im satz...

Danke, ich probier gleich 'mal aus.
kolla
 2004-04-01 12:19
#31957 #31957
User since
2004-03-25
12 articles
BenutzerIn
[default_avatar]
der syntax-error is weg...
aber nu sagt execute: ... called with 16 bind variables when 1 are needed ...

ich muß doch wohl keine 16 Fragezeichen in den insert-string schreiben, zumal ich die anzahl eigentlich nicht kenne???
oder gibts in sql nen wiederholungsoperator der mit ner Varaiblen gesetzt werden kann ( INSERT ... $istjetztsechzehn * (?) ) ???

cu walter
renee
 2004-04-01 12:22
#31958 #31958
User since
2003-08-04
14371 articles
ModeratorIn
[Homepage] [default_avatar]
Ich kann für nichts garantieren, aber probier mal folgendes:
Code: (dl )
1
2
3
4
5
6
[...]
@zeile = map{$dbh->quote($_)}@zeile;
$sql = qq{ INSERT INTO dat2  VALUES (@zeile)};
$sth = $dbh->prepare($sql);
$sth->execute();
[...]
\n\n

<!--EDIT|renee|1080807791-->
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
format_c
 2004-04-01 12:30
#31959 #31959
User since
2003-08-04
1706 articles
HausmeisterIn
[Homepage] [default_avatar]
Ich denke dann wird das mit den Platzhaltern nix werden.
Dann solltest du dein SQL-Statement so gestalten:
Code: (dl )
1
2
3
my $sql = qq|INSERT INTO dat2 VALUES (| . join(', ',map { $dbh->quote($_) } @zeile) . qq|)|;
my $sth = $dbh->prepare($sql) or die $dbh->errstr();
$sth->execute();


Gruß Alex
format_c
 2004-04-01 12:42
#31960 #31960
User since
2003-08-04
1706 articles
HausmeisterIn
[Homepage] [default_avatar]
Wenn sich allerdings die Länge des Arrays ändert kannst du auf massive probleme treffen.
Zumal du dem Primary Key , falls vorhanden, der meistens die Eigenschaft hat sich selbst um eins zu erhöhen, dann einen Strich durch die Rechnung machst.

Ich gestalte meine INSERTS meist so:
[sql]INSERT INTO table (all,colums,except,id) VALUES ('val1','val2','val3','val4')
[/sql]

Gruß Alex
kolla
 2004-04-01 13:04
#31961 #31961
User since
2004-03-25
12 articles
BenutzerIn
[default_avatar]
@Alex

Danke, Deine Lösung funktioniert ...
für mich als Anfänger sieht dies allerdings noch etwas kryptisch aus ;-)
dies hätte ich sicher niiiieeeemals hinbekommen
ich hätte sonst sicher mit .... VALUES '$zeile[0]', '$zeile[1]', '$zeile[2]' ...
lösen müssen --- und ich vermute, dass ich dann bei '$zeile[15]' und '$zeile[16]'
trotzdem ein problem bekommen hätte, da die 2Felder das format date und time haben...

also nochmals tnx & gruesse

walter
pq
 2004-04-01 14:01
#31962 #31962
User since
2003-08-04
12208 articles
Admin1
[Homepage]
user image
[quote=kolla,01.04.2004, 10:19]ich muß doch wohl keine 16 Fragezeichen in den insert-string schreiben, zumal ich die anzahl eigentlich nicht kenne???[/quote]
wo ist denn das problem mit 16 fragezeichen??
Code: (dl )
1
2
3
$sql = qq{ INSERT INTO dat2  VALUES (}. (join ',', ('?')x 16) . ')'; 
$sth = $dbh->prepare($sql);
$sth->execute(@zeile);

ich sag's immer wieder gerne, aber wir schreiben hier perl und nicht java...
natürlich hat perl sowas feines wie einen wiederholungsoperator...
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
kolla
 2004-04-01 14:24
#31963 #31963
User since
2004-03-25
12 articles
BenutzerIn
[default_avatar]
[quote=pq,01.04.2004, 12:01][/quote]
Code: (dl )
qq{ INSERT INTO dat2  VALUES (}. (join ',', ('?')x 16) . ')'; 


that's cool  

und genial!

cu walter
<< >> 10 entries, 1 page



View all threads created 2004-04-01 11:45.