/ Forside / Teknologi / Udvikling / Perl / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Perl
#NavnPoint
bjarneA 141
poul_from 50
soccer 30
Nicknack 14
Tmpj 0
DBI "genererer" fejl
Fra : Martin Andersen


Dato : 19-11-01 00:45

Hej!

Jeg bruger ActiveState Perl v. 5.6.1 build 628, og følgende kode får
windows (2000) til at sige at perl.exe har genereret fejl og vil blive
lukket. Jeg har bemærket at det sker når jeg opretter en statementhandle
i DBI såsom (altså med ?-tegn):
$sql = "insert into log (tekst,dato) values (?,?)";
$insertsth = $dbh2->prepare($sql);

og så kalder jeg:
$insertsth->execute($foo,$bar);

en del gange, eller bare en gang. Fejlen dukker vist også op hvis jeg
slet ikke kalder execute.
Men den opstår når jeg kalder en af disse to (eller begge):
$insertsth->finish();
$dbh2->disconnect();

Men ikke hvis jeg bare forlader filen, uden at kalde dem.
Nogen der ved hvad der kan være galt?

/Martin


 
 
Dennis Haney (20-11-2001)
Kommentar
Fra : Dennis Haney


Dato : 20-11-01 19:40

Martin Andersen <martin@kampsax.dtu.dk> writes:

> Hej!
>
> Jeg bruger ActiveState Perl v. 5.6.1 build 628, og følgende kode får
> windows (2000) til at sige at perl.exe har genereret fejl og vil blive
> lukket.

Hvilken fejl? Og når du nu bruger en database, hvad er det så?

> Jeg har bemærket at det sker når jeg opretter en statementhandle
> i DBI såsom (altså med ?-tegn):
> $sql = "insert into log (tekst,dato) values (?,?)";
> $insertsth = $dbh2->prepare($sql);
>
> og så kalder jeg:
> $insertsth->execute($foo,$bar);
>
> en del gange, eller bare en gang. Fejlen dukker vist også op hvis jeg
> slet ikke kalder execute.
> Men den opstår når jeg kalder en af disse to (eller begge):
> $insertsth->finish();
> $dbh2->disconnect();

Altså fejlen opstår KUN når du kalder enten finish eller disconnect?
Eller er det også første gang du kalder execute?

Har du initaliseret dbh2 ordentligt? Det har du vel hvis du ikke får
fejl ved prepare linien.

Checker du fejl på din prepare, det gør du ikke i det du har skrevet.
Brug $insertsth = $dbh2->prepare($sql) || die DBI::errstr;
istedet.

> Men ikke hvis jeg bare forlader filen, uden at kalde dem.

Forlader filen? Hvilken fil?

> Nogen der ved hvad der kan være galt?
>
> /Martin
>

--
Dennis

Mother said that there would be days like this,
but she never said there would be so many!

Martin Andersen (21-11-2001)
Kommentar
Fra : Martin Andersen


Dato : 21-11-01 02:40

Dennis Haney wrote:

> > Jeg bruger ActiveState Perl v. 5.6.1 build 628, og følgende kode får
> > windows (2000) til at sige at perl.exe har genereret fejl og vil blive
> > lukket.
>
> Hvilken fejl? Og når du nu bruger en database, hvad er det så?

En standard windows fejl. "XXXX har genereret fejl og vil blive lukket af
windows"
Databasen er ligegyldig (da jeg har fået samme fejl med mySQL og Access)

> > Jeg har bemærket at det sker når jeg opretter en statementhandle
> > i DBI såsom (altså med ?-tegn):
> > $sql = "insert into log (tekst,dato) values (?,?)";
> > $insertsth = $dbh2->prepare($sql);
> >
> > og så kalder jeg:
> > $insertsth->execute($foo,$bar);
> >
> > en del gange, eller bare en gang. Fejlen dukker vist også op hvis jeg
> > slet ikke kalder execute.
> > Men den opstår når jeg kalder en af disse to (eller begge):
> > $insertsth->finish();
> > $dbh2->disconnect();
>
> Altså fejlen opstår KUN når du kalder enten finish eller disconnect?
> Eller er det også første gang du kalder execute?

KUN når jeg kalder finish eller disconnect. Execute kører fint.
Men jeg fandt ud af at der kun kommer fejl HVIS execute er blevet kaldt
mindst en gang.

> Har du initaliseret dbh2 ordentligt? Det har du vel hvis du ikke får
> fejl ved prepare linien.

ja

> Checker du fejl på din prepare, det gør du ikke i det du har skrevet.
> Brug $insertsth = $dbh2->prepare($sql) || die DBI::errstr;
> istedet.

ja

> > Men ikke hvis jeg bare forlader filen, uden at kalde dem.
>
> Forlader filen? Hvilken fil?

Jeg mente bare at scriptet terminerede.

Mvh
Martin


Dennis Haney (21-11-2001)
Kommentar
Fra : Dennis Haney


Dato : 21-11-01 16:57

Martin Andersen <martin@kampsax.dtu.dk> writes:

> Dennis Haney wrote:
>
> > > Jeg bruger ActiveState Perl v. 5.6.1 build 628, og følgende kode får
> > > windows (2000) til at sige at perl.exe har genereret fejl og vil blive
> > > lukket.
> >
> > Hvilken fejl? Og når du nu bruger en database, hvad er det så?
>
> En standard windows fejl. "XXXX har genereret fejl og vil blive lukket af
> windows"

okie

> Databasen er ligegyldig (da jeg har fået samme fejl med mySQL og Access)

okie

>
> > > Jeg har bemærket at det sker når jeg opretter en statementhandle
> > > i DBI såsom (altså med ?-tegn):
> > > $sql = "insert into log (tekst,dato) values (?,?)";
> > > $insertsth = $dbh2->prepare($sql);
> > >
> > > og så kalder jeg:
> > > $insertsth->execute($foo,$bar);
> > >
> > > en del gange, eller bare en gang. Fejlen dukker vist også op hvis jeg
> > > slet ikke kalder execute.
> > > Men den opstår når jeg kalder en af disse to (eller begge):
> > > $insertsth->finish();
> > > $dbh2->disconnect();
> >
> > Altså fejlen opstår KUN når du kalder enten finish eller disconnect?
> > Eller er det også første gang du kalder execute?
>
> KUN når jeg kalder finish eller disconnect. Execute kører fint.
> Men jeg fandt ud af at der kun kommer fejl HVIS execute er blevet kaldt
> mindst en gang.
>

Hvis du nu bruger do istedet virker det så?
altså:

$dbh2->do("insert into log (tekst,dato) values
(".$dbh2->quote($foo).",".$dbh2->quote($bar).")") || die DBH::errstr;

Kommer de værdier du smider ind, rent faktisk ind i databasen?

--
Dennis

Mother said that there would be days like this,
but she never said there would be so many!

Martin Andersen (22-11-2001)
Kommentar
Fra : Martin Andersen


Dato : 22-11-01 02:06

Dennis Haney wrote:

> > > Altså fejlen opstår KUN når du kalder enten finish eller disconnect?
> > > Eller er det også første gang du kalder execute?
> >
> > KUN når jeg kalder finish eller disconnect. Execute kører fint.
> > Men jeg fandt ud af at der kun kommer fejl HVIS execute er blevet kaldt
> > mindst en gang.
> >
>
> Hvis du nu bruger do istedet virker det så?
> altså:
>
> $dbh2->do("insert into log (tekst,dato) values
> (".$dbh2->quote($foo).",".$dbh2->quote($bar).")") || die DBH::errstr;
>
> Kommer de værdier du smider ind, rent faktisk ind i databasen?

Alt virker, undtagen hvis jeg bruger ?-tegn i en query først.
Og værdierne kommer ind, så det er strengt taget en detalje at det ikke virker.
For jeg kan bare lade være med at kalde finish eller disconnect. Så virker det
nemlig.

Jeg var bare nysgerrig hvorfor det var sådan.
Men tak for interessen.

/Martin



Thorbjørn Ravn Ander~ (22-11-2001)
Kommentar
Fra : Thorbjørn Ravn Ander~


Dato : 22-11-01 08:53

Martin Andersen wrote:

> Nogen der ved hvad der kan være galt?

Lyder som en pointerfejl i C-delen af DBI.

Kan du lave et minimalt eksempel som reproducerer fejlen, og vise det her?


Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408914
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste