sslug-teknik team mailing list archive
-
sslug-teknik team
-
Mailing list archive
-
Message #74684
Re: Brug af expect ?
Hej
Brian Ipsen wrote:
Hej,
SQL ....
Hvis flere resultater kommer retur efter en query, så skal jeg have mulighed
for at loop'e igennem dem, og bearbejde dem linie efter linie.
Jeg har mere eller mindre et script i bash, som klarer det i øjeblikket -
men vil gerne over i expect, da jeg tror det kan give bedre performance...
Uanset om du bruger expect elelr ej, hvordan ved du så når du er nået til
sidste linje af et resultat ?
> Any hints ?
Jeg bruger istedet perl og perl-modulet DBI.
use DBI;
#use strict;
my $dbh = DBI->connect("DBI:mysql:database=$my_dbn;host=localhost",
$my_dbuser, $my_dbpasswd, {RaiseError => 0, AutoCommit => 0});
my $sth = $dbh->prepare("SELECT * FROM something WHERE someotherthing = 'somethirdthing'");
$sth->execute();
while (my $ref = $sth->fetchrow_arrayref) {
do_something_with($$ref[0]);
}
$sth->finish();
do_something_more;
$dbh->disconnect();
Simpelt, hurtigt og effektivt. Eneste catch er, at man lige skal lære Perl,
men det skader jo nok ikke.
Fåes ikke meget hurtigere med mindre du vil
buge C/C++, men det er også meget let.
// Init MySQL
MYSQL* handle = mysql_init(NULL);
if (!handle) {
// fprintf(stderr, "Failed to init mysql\n");
return 0;
}
// Connect to db
if (!mysql_real_connect(handle, host, user, passwd, db, port, socket, flag)) {
// fprintf(stderr, "Failed to connect to mysql\n");
mysql_close(handle);
return 0;
}
sprintf(query, "SELECT %s,%s FROM %s WHERE %s <= %u AND %s >= %u AND %s = 'A' AND %s = 'Y'",
start, end, table, start, addr, end, addr, allowdeny, enabled);
// First we query
if (mysql_real_query(handle, query, (unsigned long) strlen(query)) == 0) {
// Then we prepare the result
if ((result = mysql_use_result(handle)) != NULL) {
// Now see if we matched anything
validated = mysql_fetch_row(result) ? 1 : 0;
// Now free result again
mysql_free_result(result);
} // else fprintf(stderr, "Failed to prepare result of query\n");
} // else fprintf(stderr, "Failed to query database\n");
mysql_close(handle);
Man kan sikkert også bruge Tk/Tcl, men den har jeg ikke lige på stående fod.
--PMM
Follow ups
References