Perl-Skript zum Eintragen in Datenbank

Perl-Skript zum Eintragen in Datenbank

am 25.04.2006 20:19:08 von Marek Stepanek

Hallo alle!


Ich bin nicht ganz sicher, ob ich hier on-topic bin.

Ich bin MySQL Anfänger und arbeite ein etwas veraltetes Buch durch, das
darüber hinaus auch nicht sonderlich pädagogisch ist: MySQL & Perl -
Developer's Guide, Paul DuBois ...

Auf Seite 83 das todo1.pl - Skript erzeugt bei mir folgende Fehlermeldung im
Apache error_log:

[Mon Apr 24 11:12:38 2006] [error] [client 127.0.0.1] DBI->connect using
'old-style' syntax is deprecated and will be an error in future versions at
/usr/local/apache2/modules/WebDB.pm line 11, referer:
http://localhost/cgi-bin/todo1.pl
[Mon Apr 24 11:12:38 2006] [error] [client 127.0.0.1] Can't use string ("0")
as a HASH ref while "strict refs" in use at
/usr/local/lib/perl5/site_perl/5.8.8/darwin-2level/DBI.pm line 540.,
referer: http://localhost/cgi-bin/todo1.pl

Das folgende Skript "insert_test.pl" ist eine Kurzform, das ich für diese
Forumsanfrage gekürzt habe. Es erzeugt über die Shell aufgerufen die selbe
Fehlermeldung.

Kann mir jemand helfen ?

#! /usr/bin/perl -w
# insert_test.pl

use strict;
use lib qw(/usr/local/apache2/modules);

use WebDB;

my ($inhalt) = "Dies ist ein neuer Eintrag in die Todo-Liste!";
my $dbh;

$inhalt =~ s/^\s+//; # Leerzeichen vorne weg
$inhalt =~ s/\s+$//; # Leerzeichen am Ende weg
if ($inhalt ne "") # falls noch was übrig ist
{
$dbh = WebDB::connect ();
$dbh->do (qq{
INSERT INTO todo SET t = NOW(),
status = 'offen', inhalt = ?
}, undef, $inhalt);
$dbh->disconnect ();
}


Das Verbindungsmodul in /usr/local/apache2/modules/WebDB :


package WebDB;

use strict;
use DBI;

my $host_name = "localhost";
my $db_name = "webdb";
my $dsn = "DBI:mysql:host=$host_name;database=$db_name";

sub connect {
return (DBI->connect ($dsn, "webdev", "webdevpass", (PrintError => 0,
RaiseError => 1)));
}

sub conncect_mit_options_datei {
$dsn .= ";mysql_read_default_file=$ENV{HOME}/.my.cnf";
return (DBI->connect ($dsn, undef, undef, (PrintError => 0, RaiseError
=> 1)));
}

1;

Re: Perl-Skript zum Eintragen in Datenbank

am 25.04.2006 23:58:51 von Christian Kirsch

Marek Stepanek schrieb:
>
> Hallo alle!
>
>
> Ich bin nicht ganz sicher, ob ich hier on-topic bin.
>

Bist Du nicht -> de.comp.lang.perl.misc

> sub connect {
> return (DBI->connect ($dsn, "webdev", "webdevpass", (PrintError => 0,
> RaiseError => 1)));
> }
>
Hier stimmt nach allem, was ich weiß, die Klammerung in DBI->connect
nicht - der letzte Parameter muss eine Hash-Referenz sein, IIRC.

Ich empfehle die Dokumentation zu DBI und DBD::mysql, jeweils erreichbar
über man oder perldoc.

Re: Perl-Skript zum Eintragen in Datenbank

am 26.04.2006 22:31:03 von Marek Stepanek

On 25.04.2006 23:58, in article
444e9b9c$0$11070$9b4e6d93@newsread4.arcor-online.net, "Christian Kirsch"
wrote:

> Marek Stepanek schrieb:
>
>> sub connect {
>> return (DBI->connect ($dsn, "webdev", "webdevpass", (PrintError => 0,
>> RaiseError => 1)));
>> }
>>
> Hier stimmt nach allem, was ich weiß, die Klammerung in DBI->connect
> nicht - der letzte Parameter muss eine Hash-Referenz sein, IIRC.
>
> Ich empfehle die Dokumentation zu DBI und DBD::mysql, jeweils erreichbar
> über man oder perldoc.

Danke Christian,


tatsächlich, Du hattest Recht:

sub connect {
return (DBI->connect ($dsn, "webdev", "webdevpass", { RaiseError => 1,
AutoCommit => 0 }));
}

und alles läuft :-)


grüße aus München


marek