Finns det något enkelt sätt att skriva ut ett felmedelade från mysql om man har kopplat ihop den med perl?
Om jag lägger till poster manuellt i mysql promten så får jag ju felmedelande om jag tex har skrivit fel i sql-satsen.
Kan jag få detta meddelande utskrivet på en html sida som perl skapar på nåt enkelt sätt?
mysql error?
5 svar · 342 visningar · startad av nordan
Ingen som vet om det finns någon error funktion?
Ja om man skall göra något i MySQL från MySQL promten och skriver ett fel i SQL sattsen så kommer det upp ett felmedelade vad det är.
Exempel på kod som funkar
SELECT * FORM table WHERE ID='1';
Skriver jag istället så här:
SELECT * FROM table WHER ID='1';
Alltså stavar fel till WHERE
Så får jag felmedelandet:
ERROR 1064: You have an error in your SQL syntax near 'ID='1'' at line 1
När jag kör ett Perlscript som är kopplat till MySQL och det är fel på SQL sattsen så går det att köra scriptet och återge allt som finns i koden som det skall förutom det som jag vill hämta upp med hjälp av den SQL satts jag skrev fel på.
Det blir alltså inte något error
Det jag vill är då att skriva ut en error sträng gärna med felmedelade som jag visa ovan
Hej
Använder du dig av DBI ?
I så fall så använd errstr...dvs:
print $dbh->errstr;
Har exempel på det här:
http://www.kodarkivet.com/?katid=8
Hej,
Här är ett exempel på hur jag brukar koda mina cgi script. En eval runt en subfunktion fångar upp eventuella fel och printar ut dom.
Ändra database user och password i sub query_db. Testa sedan med giltiga och felaktiga sql frågor.
För att kalla på scriptet http://www.server.com/cgi-bin/script.cgi?ACTION=DBI
Att ha möjligheten att skriva in sql satser via ett formulär är inget jag rekommenderar, det är en STOR säkerhetsrisk.
För att begränsa till ex. SELECT så föreslår jag att du kikar på SQL::Statement.
#!/usr/bin/perl -w
use strict;
use CGI;
use DBI;
use vars qw( $q );
eval { &main(); };
if ($@) {
print "Content-type: text/html\n\n"
. "ERROR: $@\n";
}
sub main {
$q = new CGI;
my $default = 'HELLO';
my $action = $q->param('ACTION') || $default;
my %actions = (
'HELLO' => \&hello,
'ERROR' => \&error,
'DBI' => \&query_db,
);
my $html = defined( $actions{$action} ) ?
$actions{$action}->()
: $actions{$default}->();
print $q->header(), $html;
}
sub hello {
return $q->start_html('ACTION = HELLO')
. $q->h3('Hello Perl')
. $q->end_html;
}
sub error {
# Genererar ett felmeddelande:
# Undefined subroutine CGI::error
return $q->error();
}
sub query_db {
my $dbh = DBI->connect( "DBI:mysql:database", "user", "password" )
or die "Can't connect to database $DBI::errstr";
my $sth = $dbh->prepare("SELECT * FROM TABLE");
if ( !defined $sth ) {
die $dbh->errstr . "\n";
}
if ( !$sth->execute ) {
die $sth->errstr . "\n";
}
my $rows = $sth->{'NUM_OF_FIELDS'};
$sth->finish;
$dbh->disconnect;
return $q->start_html('ACTION = DBI')
. $q->h3('Det finns ' . $rows . ' rader i tabellen.')
. $q->end_html;
}