---
name: "NetSDS::DBI"
section: "3pm"
platform: "linux"
package: "libnetsds-perl"
version: "1.301-4"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/NetSDS::DBI"
---

# NetSDS::DBI(3pm)

DBI wrapper for NetSDS

## NAME

NetSDS::DBI - DBI wrapper for NetSDS

## SYNOPSIS

```
        use NetSDS::DBI;
        $dbh = NetSDS::DBI->new(
                dsn    => 'dbi:Pg:dbname=test;host=127.0.0.1;port=5432',
                login  => 'user',
                passwd => 'topsecret',
        );
        print $db->call("select md5(?)", 'zuka')->fetchrow_hashref->{md5};
```

## DESCRIPTION

`"NetSDS::DBI"` module provides wrapper around DBI module.

## CLASS API

- **new(%params)** - class constructor

  ```
      $dbh = NetSDS::DBI->new(
                  dsn    => 'dbi:Pg:dbname=test;host=127.0.0.1;port=5432',
                  login  => 'user',
                  passwd => 'topsecret',
          );
  ```

- **dbh()** - DBI connection handler accessor

  Returns: DBI object

  This method provides accessor to DBI object and for low level access to database specific methods.

  Example (access to specific method):

  ```
          my $quoted = $db->dbh->quote_identifier(undef, 'auth', 'services');
          # $quoted contains "auth"."services" now
  ```

- **call($sql, @bind\_params)** - prepare and execute SQL query

  Method `"call()"` implements the following functionality:

  ```
          * check connection to DBMS and restore it
          * prepare chached SQL statement
          * execute statement with bind parameters
  ```

  Parameters:

  ```
          * SQL query with placeholders
          * bind parameters
  ```

  Return:

  ```
          * statement handler from DBI
  ```

  Example:

  ```
          $sth = $dbh->call("select * from users");
          while (my $row = $sth->fetchrow_hashref()) {
                  print $row->{username};
          }
  ```

- **fetch\_call($sql, @params)** - call and fetch result

  Paramters: SQL query, parameters

  Returns: arrayref of records as hashrefs

  Example:

  ```
          # SQL DDL script:
          # create table users (
          #       id serial,
          #       login varchar(32),
          #       passwd varchar(32)
          # );
          # Now we fetch all data to perl structure
          my $table_data = $db->fetch_call("select * from users");
          # Process this data
          foreach my $user (@{$table_data}) {
                  print "User ID: " . $user->{id};
                  print "Login: " . $user->{login};
          }
  ```

- **begin()** - start transaction

  - **commit()** - commit transaction

  - **rollback()** - rollback transaction

  - **quote()** - quote SQL string

  Example:

  ```
          # Encode $str to use in queries
          my $str = "some crazy' string; with (dangerous characters";
          $str = $db->quote($str);
  ```

## INTERNAL METHODS

- **\_add\_sets()** - add initial SQL query

  Example:

  ```
      $obj->_add_sets("set search_path to myscheme");
      $obj->_add_sets("set client_encoding to 'UTF-8'");
  ```

- **\_add\_attrs()** - add DBI handler attributes

  ```
      $self->_add_attrs(AutoCommit => 1);
  ```

- **\_check\_connection()** - ping and reconnect

  Internal method checking connection and implement reconnect

- **\_connect()** - connect to DBMS

  Internal method starting connection to DBMS

## EXAMPLES

samples/testdb.pl

## SEE ALSO

DBI, DBD::Pg

## TODO

1\. Make module less PostgreSQL specific.

## AUTHOR

Michael Bochkaryov \<misha@rattler.kiev.ua\>

## LICENSE

Copyright (C) 2008-2009 Net Style Ltd.

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
