webForumDet fria alternativet

mysql error?

5 svar · 342 visningar · startad av nordan

nordanMedlem sedan juni 2000929 inlägg
#1

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?

nordanMedlem sedan juni 2000929 inlägg
#2

Ingen som vet om det finns någon error funktion?

HansenMedlem sedan aug. 2000383 inlägg
#3

Hej,

Kan du utveckla det hela lite?
Vad försöker du göra?
Får du scriptfel?

nordanMedlem sedan juni 2000929 inlägg
#4

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

ZreoXMedlem sedan juli 200159 inlägg
#5

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

HansenMedlem sedan aug. 2000383 inlägg
#6

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;
}
Genererad på 395 ms · cache AV · v20260730165559-full.f96bc7eb