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

INSERT funktioniert nicht mit ? trotz (?,?)



<< |< 1 2 >| >> 14 Einträge, 2 Seiten
Franz
 2007-03-09 17:23
#35333 #35333
User since
2006-07-12
31 Artikel
BenutzerIn
[default_avatar]
Hallo,
ich habe ein merkwürdiges Problem bei einem INSERT

Wenn ich ein ? in meinem Text habe, dann bekomme ich eine Fehlermeldung. Dabei dachte ich dass das von DBI automatisch gequotet wird. Hat jemand das Problem auch schon mal gehabt?

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
use DBI;

$dbName= 'testdb';
$dbHost = 'localhost';
$dbUser = 'testuser';
$dbPass = 'testpasswort';

$dsn="dbi:PgPP:dbname=$dbName;host=$dbHost;port=5432";
$dbh=DBI->connect("$dsn","$dbUser","$dbPass") or die "Datenbank nicht erreichbar";

$a='?';
$b="b";

$sql="INSERT INTO test (text1,text2) VALUES (?,?)";
$prep_sql=$dbh->prepare($sql) or die p$dbh->errstr;
$prep_sql->execute($a,$b) or $dbh->errstr;
$prep_sql->finish;


DBD::PgPP::st execute failed: ERROR: syntax error at or near "b''" at character 42

Windows XP
PostgreSQL
Activestate Perl
PPM sagt dass DBI in Version 1.5 installiert ist, aber upaten kann man das mit ppm wohl irgendwie nicht :-(\n\n

<!--EDIT|Franz|1173454210-->
GwenDragon
 2007-03-09 18:09
#35334 #35334
User since
2005-01-17
14748 Artikel
Admin1
[Homepage]
user image
Ja, DBI quotet das. Ein '?' ist kein Problem und "b" auch nicht.

Aber verwende bitte
use strict;
use warnings;
in deinem Skript.

$prep_sql=$dbh->prepare($sql) or die p$dbh->errstr;
$prep_sql->execute($a,$b) or $dbh->errstr;

Da ist in der ersten Zeile nach die ein p zu viel.
Und in der nächsten Zeile fehlt das die.

Natürlich lässt sich DBI mit PPM upgraden.
ppm upgrade -inst -prec DBI\n\n

<!--EDIT|GwenDragon|1173458693-->
ptk
 2007-03-10 00:16
#35335 #35335
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Könnte ein Bug im DBD-Treiber sein.
Gast Gast
 2007-03-10 16:23
#35336 #35336
Hallo,
danke für die Tipps

1. Beispielcode strict/warnings, klar funktioniert prinzipiell jedenfalls

DBI habe ich so upgedated, das Problem besteht leider immer noch, hat evtl. noch jemand eine Idee? Das Problem müsste doch sicherlich bei vielen auftreten. :-( Hab das auf zwei Windows Systemen.
renee
 2007-03-10 16:29
#35337 #35337
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Welche Version von DBD::PgPP hast Du denn? Hast Du schonmal DBD::Pg versucht?
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/
jan
 2007-03-10 17:53
#35338 #35338
User since
2003-08-04
2536 Artikel
ModeratorIn
[Homepage] [default_avatar]
kann's sein, dass test ein reserved word ist und daher der fehler kommt?

wie sieht denn die create-table-syntax für deine tabelle aus?

beim kurzen suchen fand ich u.a.: http://www.flamingspork.com/blog....y-words
nepos
 2007-03-10 18:25
#35339 #35339
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Nope, ist kein Keyword bei PostgreSQL. Ne Tabelle namens Test ist schon ok :)
jan
 2007-03-10 22:33
#35340 #35340
User since
2003-08-04
2536 Artikel
ModeratorIn
[Homepage] [default_avatar]
ok, war'n schuss ins blaue ;)

bleibt die frage: wie sieht die tabelle eigentlich aus?
und: welche pgsql-version. bei mir hat der sprung von 7.4 auf 8.1 und dann von 8.1 auf 8.22 ne menge gebracht an "unerklärbaren" problemen, die ich hatte.
nepos
 2007-03-11 12:31
#35341 #35341
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ehm, wenn 8.2 dann bitte 8.2.3. 8.2.2 war ein Security-Update, das einen Bug mit drin hatte ;)
Und ja, in den neueren Versionen haben sich scheints ein paar Kleinigkeiten geändert.

Ich denke, dass es in dem Fall hier irgendwie im Quoting liegen dürfte. Eventuell verbockt auch der DBD::PgPP-Treiber das. Habe bis jetzt nur mit dem Binärtreiber DBD::Pg gearbeitet und damit keine Probleme.

Was einen Versuch wert wäre:
Füg doch mal vor dem execute() folgendes ein:
Code: (dl )
$dbh->trace(2);

Damit sollte der Datenbanktreiber bisschen gesprächig werden und paar Infos mehr ausspucken. Wenns geht dann hier posten :)
Franz
 2007-03-12 00:02
#35342 #35342
User since
2006-07-12
31 Artikel
BenutzerIn
[default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
DBI::db=HASH(0x1bc9b24) trace level set to 0x0/2 (DBI @ 0x0/0) in DBI 1.54-ithread (pid 728)
   -> quote for DBD::PgPP::db (DBI::db=HASH(0x1bc9b24)~INNER '?') thr#224014
   <- quote= ''?'' at PgPP.pm line 361
   -> quote for DBD::PgPP::db (DBI::db=HASH(0x1bc9b24)~INNER 'b') thr#224014
   <- quote= ''b'' at PgPP.pm line 361
DBD::PgPP::st execute failed: ERROR:  syntax error at or near "b''" at character 34
   -> errstr in DBD::_::common for DBD::PgPP::db (DBI::db=HASH(0x1bc10e8)~0x1bc9b24) thr#224014
      ERROR: 1 'ERROR:  syntax error at or near "b''" at character 34
' (err#0)
   <- errstr= ( 'ERROR:  syntax error at or near "b''" at character 34
' ) [1 items] at test.pl line 21
ERROR:  syntax error at or near "b''" at character 34
   -> DESTROY for DBD::PgPP::db (DBI::db=HASH(0x1bc9b24)~INNER) thr#224014
      ERROR: 1 'ERROR:  syntax error at or near "b''" at character 34
' (err#0)
   <> FETCH= DBD::PgPP::Protocol=HASH(0x1bc9d04) ('pgpp_connection' from cache) at PgPP.pm line 323

      ERROR: 1 'ERROR:  syntax error at or near "b''" at character 34
' (err#0)
   <- DESTROY= 1
\n\n

<!--EDIT|renee|1173682231-->
<< |< 1 2 >| >> 14 Einträge, 2 Seiten



View all threads created 2007-03-09 17:23.