Perl
Prev | Chapter 7. How to get what works with it working | Next

## Perl

There are a few ways to use Perl to connect to a SQL Server using FreeTDS.

### DBD::ODBC

The recommended choice is `DBD::ODBC` with the FreeTDS `ODBC` driver.

### DBD::Sybase

You may also use `DBD::Sybase` from Michael Peppler. Despite the name it works for any Sybase or Microsoft SQL Server. `DBD::Sybase` uses the `CT-Library` API and works well. However the project has not been updated for a while.

### Sybperl

Finally, you can use `Sybperl`. Scripts written against `Sybperl` will not run against other databases the way DBI scripts will. However, it will be familiar ground for those who know `DB-Library`.

### Building and using the Perl modules

Example 7.2. Building `DBD::ODBC`

    	$ cd DBD-ODBC-0.28
    	$ export SYBASE=/usr/local/freetds
    	$ export ODBCHOME=/usr/local
    	$ export DBI_DSN=dbi:ODBC:JDBC
    	$ export DBI_USER=guest
    	$ export DBI_PASS=sybase
    	$ perl Makefile.PL
    	$ make
    	$ sudo make install

| Note
We used the public JDBC server logins for our configuration here. You'll want to replace these with ones suitable to your environment.

Example 7.3. Connect to a server with `DBD::ODBC`

    	#!/usr/bin/env perl
    	#
    	use DBI;

    	my $dbh = DBI->connect("dbi:ODBC:JDBC", 'guest', 'sybase', {PrintError => 0});

    	die "Unable for connect to server $DBI::errstr"
    		unless $dbh;

    	my $rc;
    	my $sth;

    	$sth = $dbh->prepare("select \@\@servername");
    	if($sth->execute) {
    		while(@dat = $sth->fetchrow) {
    			print "@dat\n";
    		}
    	}

Example 7.4. Building `DBD::Sybase`

    	$ cd DBD-Sybase-0.91
    	$ export SYBASE=/usr/local/freetds
    	$ perl Makefile.PL
    	$ make
    	$ sudo make install

There will be some output about missing libraries after `perl Makefile.PL`. These are normal.

The following example will attach to Sybase's public JDBC server and run a simple query (it can be found in `samples/test.pl`):

Example 7.5. Connect to a server with `DBD::Sybase`

    	#!/usr/bin/env perl
    	#
    	use DBI;

    	my $dbh = DBI->connect("dbi:Sybase:server=JDBC", 'guest', 'sybase', {PrintError => 0});

    	die "Unable for connect to server $DBI::errstr"
    		unless $dbh;

    	my $rc;
    	my $sth;

    	$sth = $dbh->prepare("select \@\@servername");
    	if($sth->execute) {
    		while(@dat = $sth->fetchrow) {
    			print "@dat\n";
    		}
    	}

You'll note this is the same program as for `DBD::ODBC` with the exception of the `connect` statement. Welcome to the magic of DBI!

Prev | Up | Next
Chapter 7. How to get what works with it working | Home | PHP