This section covers the methods and attributes associated with database handles.
The following methods are specified for DBI database handles:
do |
$rc = $dbh->do($statement) || die $dbh->errstr; $rc = $dbh->do($statement, \%attr) || die $dbh->errstr; $rv = $dbh->do($statement, \%attr, @bind_values) || ... |
Prepares and executes a single statement. Returns the number of rows affected or undef on error. A return value of -1 means the number of rows is not known or is not available.
The default do method is logically similar to:
sub do { my($dbh, $statement, $attr, @bind_values) = @_; my $sth = $dbh->prepare($statement, $attr) or return undef; $sth->execute(@bind_values) or return undef; my $rows = $sth->rows; ($rows == 0) ? "0E0" : $rows; # always return true if no error }
my $rows_deleted = $dbh->do(q{ DELETE FROM table WHERE status = ? }, undef, 'DONE') || die $dbh->errstr;
selectrow_array |
@row_ary = $dbh->selectrow_array($statement); @row_ary = $dbh->selectrow_array($statement, \%attr); @row_ary = $dbh->selectrow_array($statement, \%attr, @bind_values); |
This utility method combines prepare, execute, and fetchrow_array into a single call. If called in a list context, it returns the first row of data from the statement. If called in a scalar context, it returns the first field of the first row. The $statement parameter can be a previously prepared statement handle, in which case the prepare is skipped.
If any method fails, and RaiseError is not set, selectrow_array will return an empty list.
selectall_arrayref |
$ary_ref = $dbh->selectall_arrayref($statement); $ary_ref = $dbh->selectall_arrayref($statement, \%attr); $ary_ref = $dbh->selectall_arrayref($statement, \%attr, @bind_values); |
This utility method combines prepare, execute, and fetchall_arrayref into a single call. It returns a reference to an array containing a reference to an array for each row of data fetched.
selectcol_arrayref |
$ary_ref = $dbh->selectcol_arrayref($statement); $ary_ref = $dbh->selectcol_arrayref($statement, \%attr); $ary_ref = $dbh->selectcol_arrayref($statement, \%attr, @bind_values); |
This utility method combines prepare, execute, and fetching one column from all the rows, into a single call. It returns a reference to an array containing the values of the first column from each row.
prepare |
$sth = $dbh->prepare($statement) || die $dbh->errstr; $sth = $dbh->prepare($statement, \%attr) || die $dbh->errstr; |
Prepares a single statement for later execution by the database engine and returns a reference to a statement handle object.
prepare_cached |
$sth = $dbh->prepare_cached($statement) $sth = $dbh->prepare_cached($statement, \%attr) $sth = $dbh->prepare_cached($statement, \%attr, $allow_active) |
Like prepare except that the statement handle returned will be stored in a hash associated with the $dbh. If another call is made to prepare_cached with the same $statement and %attr values, then the corresponding cached $sth will be returned without contacting the database server.
Here's an example of one possible use of prepare_cached:
while ( ($field, $value) = each %search_fields ) { push @sql, "$field = ?"; push @values, $value; } $qualifier = ""; $qualifier = "where ".join(" and ", @sql) if @sql; $sth = $dbh->prepare_cached("SELECT * FROM table $qualifier"); $sth->execute(@values);
commit |
$rc = $dbh->commit || die $dbh->errstr; |
Commits (makes permanent) the most recent series of database changes if the database supports transactions and AutoCommit is off.
If AutoCommit is on, then calling commit will issue a "commit ineffective with AutoCommit" warning.
rollback |
$rc = $dbh->rollback || die $dbh->errstr; |
Rolls back (undoes) the most recent series of uncommitted database changes if the database supports transactions and AutoCommit is off.
disconnect |
$rc = $dbh->disconnect || warn $dbh->errstr; |
Disconnects the database from the database handle. disconnect is typically used only before exiting the program. The handle is of little use after disconnecting.
The database is automatically disconnected by the DESTROY method if still connected when there are no longer any references to the handle. The DESTROY method for each driver should implicitly call rollback to undo any uncommitted changes. This is vital behavior to ensure that incomplete transactions don't get committed simply because Perl calls DESTROY on every object before exiting. Also, do not rely on the order of object destruction during "global destruction," as it is undefined.
ping |
$rc = $dbh->ping; |
Attempts to determine, in a reasonably efficient way, if the database server is still running and the connection to it is still working. Individual drivers should implement this function in the most suitable manner for their database engine.
table_info (NEW ) |
$sth = $dbh->table_info; |
Warning: This method is experimental and may change.
Returns an active statement handle that can be used to fetch information about tables and views that exist in the database.
For more detailed information about the fields and their meanings, refer to:
If that URL ceases to work, then use the MSDN search facility at:
and search for SQLTables returns using the exact phrase option. The link you want will probably just be called SQLTables and will be part of the Data Access SDK.
tables (NEW ) |
@names = $dbh->tables; |
Warning: This method is experimental and may change.
Returns a list of table and view names, possibly including a schema prefix. This list should include all tables that can be used in a SELECT statement without further qualification.
type_info_all (NEW ) |
$type_info_all = $dbh->type_info_all; |
Warning: This method is experimental and may change.
Returns a reference to an array that holds information about each datatype variant supported by the database and driver. The array and its contents should be treated as read-only.
$type_info_all = [ { TYPE_NAME => 0, DATA_TYPE => 1, COLUMN_SIZE => 2, # was PRECISION originally LITERAL_PREFIX => 3, LITERAL_SUFFIX => 4, CREATE_PARAMS => 5, NULLABLE => 6, CASE_SENSITIVE => 7, SEARCHABLE => 8, UNSIGNED_ATTRIBUTE=> 9, FIXED_PREC_SCALE => 10, # was MONEY originally AUTO_UNIQUE_VALUE => 11, # was AUTO_INCREMENT originally LOCAL_TYPE_NAME => 12, MINIMUM_SCALE => 13, MAXIMUM_SCALE => 14, NUM_PREC_RADIX => 15, }, [ 'VARCHAR', SQL_VARCHAR, undef, "'","'", undef,0, 1,1,0,0,0,undef,1,255, undef ], [ 'INTEGER', SQL_INTEGER, undef, "", "", undef,0, 0,1,0,0,0,undef,0, 0, 10 ], ];
type_info (NEW ) |
@type_info = $dbh->type_info($data_type); |
Warning: This method is experimental and may change.
Returns a list of hash references holding information about one or more variants of $data_type. The list is ordered by DATA_TYPE first and then by how closely each type maps to the corresponding ODBC SQL datatype, closest first. If called in a scalar context then only the first (best) element is returned.
$my_date_type = $dbh->type_info( [ SQL_DATE, SQL_TIMESTAMP ] );
For more detailed information about these fields and their meanings, refer to:
If that URL ceases to work, then use the MSDN search facility at:
and search the MSDN library for SQLGetTypeInfo returns using the exact phrase option. The link you want will probably just be called SQLGetTypeInfo (there may be more than one).
The individual datatypes are currently described here:
If that URL ceases to work, or to get more general information, use the MSDN search facility as described above, and search for SQL Data Types.
quote |
$sql = $dbh->quote($value); $sql = $dbh->quote($value, $data_type); |
Quotes a string literal for use as a literal value in an SQL statement, by escaping any special characters (such as quotation marks) contained within the string and adding the required type of outer quotation marks.
$sql = sprintf "SELECT foo FROM bar WHERE baz = %s", $dbh->quote("Don't");
For most database types, quote would return 'Don''t' (including the outer quotation marks).
This section describes attributes specific to database handles.
Changes to these database handle attributes do not affect any other existing or future database handles.
Attempting to set or get the value of an unknown attribute is fatal, except for private driver-specific attributes (which all have names starting with a lowercase letter).
For example:
$h->{AutoCommit} = ...; # set/write ... = $h->{AutoCommit}; # get/read
AutoCommit ( boolean) |
If true, then database changes cannot be rolled back (undone). If false, then database changes automatically occur within a "transaction," which must either be committed or rolled back using the commit or rollback methods.
For the purposes of this description, we can divide databases into three categories:
Databases that don't support transactions at all.
Databases in which a transaction is always active.
Databases in which a transaction must be explicitly started ('BEGIN WORK').
For these databases, attempting to turn AutoCommit off is a fatal error. commit and rollback both issue warnings about being ineffective while AutoCommit is in effect.
These are typically mainstream commercial relational databases with "ANSI standard" transaction behavior. If AutoCommit is off, then changes to the database won't have any lasting effect unless commit is called (but see also disconnect). If rollback is called, then any changes since the last commit are undone.
If AutoCommit is on, then the effect is the same as if the DBI called commit automatically after every successful database operation. In other words, calling commit or rollback explicitly while AutoCommit is on would be ineffective because the changes would have already been commited.
Changing AutoCommit from off to on should issue a commit in most drivers.
Changing AutoCommit from on to off should have no immediate effect.
For databases that don't support a specific autocommit mode, the driver has to commit each statement automatically using an explicit COMMIT after it completes successfully (and roll it back using an explicit rollback if it fails). The error information reported to the application will correspond to the statement that was executed, unless it succeeded and the commit or rollback failed.
For these databases, the intention is to have them act like databases in which a transaction is always active (as described earlier).
To do this, the DBI driver will automatically begin a transaction when AutoCommit is turned off (from the default "on" state) and will automatically begin another transaction after a commit or rollback. In this way, the application does not have to treat these databases as a special case.
See disconnect for other important notes about transactions.
Driver ( handle) |
Holds the handle of the parent driver. The only recommended use for this attribute is to find the name of the driver using:
$dbh->{Driver}->{Name}
Name (string) |
Holds the "name" of the database. Usually (and recommended to be) the same as the "dbi:DriverName:..." string used to connect to the database, but with the leading dbi:DriverName: removed.
RowCacheSize (integer) (NEW ) |
A hint to the driver indicating the size of the local row cache that the application would like the driver to use for future SELECT statements. If a row cache is not implemented, then setting RowCacheSize is ignored and getting the value returns undef.
Copyright © 2001 O'Reilly & Associates. All rights reserved.