Calocybe: DBI::st=HASH(0xd18dc)

Beitrag lesen

das ist doch das selbe, was Calocybe gesagt hat:
print("$key = $value\n") while (($key, $value) = each(%$cursor));

Richtig.

und das gibt leider gar nichts aus. Ich habe die Referenz von $cursor mit ref($cursor) abgefragt:

Benutze Data::Dumper, wie es Wolfgang vorgeschlagen hat, wenn Du wissen willst, was eine Variable alles enthaelt und von welchem Typ sie ist. (Aber Vorsicht, solche Listings koennen mitunter sehr lang werden.)

$cursor = $dblink -> prepare("select * from user");
print ref($cursor);

und das gibt witzigerweise "DBI::st" aus.
D.h. $cursor ist nicht einfach nur eine Referenz, da steckt noch etwas mehr dahinter.

Es ist also eine Referenz, die in das DBI::st Package ge-blessed wurde. Oder weniger technisch: Es ist ein DBI::st Objekt. Trotzdem ist es nachwievor auch eine Hash-Referenz.

Ich habe auch versucht einfach mal mit print DBI::st auszugeben, das gibt auch nichts. In der DBI Doku habe ich auch nichts über DBI::st gefunden.

Also ich hab mal eben bei Active State nachgeschaut, und da findet sich unter <http://www.activestate.com/Products/ActivePerl/docs/site/lib/DBI.html#dbi database handle objects>:

Prepares a single statement for later execution by the database engine and returns a reference to a statement handle object.
The returned statement handle can be used to get attributes of the statement and invoke the execute method. See Statement Handle Methods [<http://www.activestate.com/Products/ActivePerl/docs/site/lib/DBI.html#statement handle methods>].
Note that prepare should never execute a statement, even if it is not a select statement, it only prepares it for execution.

Weiter oben bei "Notation and Conventions" steht
$sth    Statement handle object

Was Du zurueck bekommst, ist also ein statement handle object und, wie ich bereits vermutet hatte, kannst/musst Du von diesem Objekt die execute-Methode aufrufen. Aber wieso liesst Du nicht einfach selber die Dokumentation, steht doch alles drin?

So long