1. Trang chủ
  2. » Giáo án - Bài giảng

accessing a mysql database from perl

5 329 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 5
Dung lượng 23,44 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Richard White’s Perl Note number 1 7 October 2008 Accessing a MySQL database from a Perl program Assumptions about the Perl version in use These instructions assume that either i you

Trang 1

Richard White’s Perl Note number 1

7 October 2008

Accessing a MySQL database from a Perl program

Assumptions about the Perl version in use

These instructions assume that either (i) you are using Perl from the Command

Prompt on a COMSC Windows machine, or (ii) you have installed ActiveState

ActivePerl on your own PC The COMSC version is currently 5.6.0 (You cannot install a new version of Perl on the COMSC machines because you won’t have

Administrator access to C:\Perl.) I have tried installing and running versions 5.6.1 and 5.8.7 on a laptop, and the notes below assume you are using one of these versions

If you are using some other version of Perl, they may or may not work (Please let me know either way.)

You can check which version of Perl you have installed, if any, by opening a

Command Prompt At the prompt, type

perl –v or perl -version

and press the Enter key If Perl is installed (correctly) you should see “This is perl, v5.6.0” or similar, followed by several lines of information

Using the MySQL driver

Before you can run a Perl program which connects to a database, Perl needs a driver for the particular database software in question For this module, this is MySQL

Testing for an installed driver

The COMSC machines do not have the Perl MySQL database driver installed, nor will a newly installed copy of ActivePerl on your own computer This section is really so that you can confirm whether you have successfully installed the driver

To test whether you have it, download and run the program DatabaseDemo.pl (or

DatabaseTest.pl), which you can get from the Perl folder in Blackboard or from

“Richard’s Perl program file repository” on my module web-site,

http://users.cs.cf.ac.uk/R.J.White/ If the driver package is not available, the program will report something like:

Can't locate DBI.pm in @INC

followed by what @INC contains (a list of folders in which Perl searches for packages) and the line number at which your program failed to find the DBI module (DBI.pm) which handles the MySQL driver

Trang 2

Installing the MySQL database driver

If you get the error messages described above, there are two ways to install the

required driver Note that there are actually two Perl modules needed: DBI is a generic interface to any type of database; DBD- mysql is the specific driver which lets Perl access MySQL databases You need both modules

When you have installed them using one of the two methods described below, test again using the program DatabaseDemo.pl or DatabaseTest.pl

There is also a program called listdrivers.pl which (if the DBI module is found) will list the database drivers it can find; these should include the driver

mysql

Once you have succeeded in installing the necessary database driver in your network drive H:\My Documents (or wherever on drive H: you stored it when doing Practical 2), if you later use another networked computer in COMSC or anywhere else in the University, you should find that the driver is already be installed and does not need to

be installed again

Method 1 – using a Zip file I prepared earlier

If you are in the COMSC practical lab., or you are at home and have tried Method 2 but still don’t have a working DatabaseDemo.pl program despite talking really nicely to PPM, try the following method

Because it will install files into your own working folder on the H: drive, whose contents are retained after logging out, after you have done this once it should not need doing again, even if you use a different machine on a future occasion No

guarantees, but I have tested this procedure on a COMSC machine running Perl 5.6.0 and on my laptop, using Perl versions 5.6.1 and 5.8.7 in Windows XP

This working folder be used to contain your Perl database programs as well as the Perl MySQL database driver discussed here (It’s possible, but more complicated, to use different folders.)

In my Perl files repository there are two zip archive files called DBI5.6.1.zip and

DBI5.8.7.zip For the Computer Science computers, use DBI5.6.1.zip

Download the appropriate one of these (don’t open it at this stage), depending on which Perl version you installed, from

http://users.cs.cf.ac.uk/R.J.White/perl/software/

Double-click on the zip archive file and choose to extract all the files from it Be careful where the files get stored Windows XP will try to put them in a new sub-folder called DBI5.6.1\ – don’t let it do this, so you need to change the destination folder path You want to extract all the files into H:\My Documents or H:\My Documents\Perl Stuff or whatever folder you want to use Allow it to use the sub- folder names that are stored in the archive (so that all the files get put into the right sub- folders), and allow it to overwrite any files which already exist

Notes:

Trang 3

If you are doing this on your own PC, save it in C:\Perl\site\lib or, if this isn’t listed, one of the folders which is listed in @INC On the COMSC machines you are not allowed to write anything to these folders The aim is to put them in one of the locations listed in @INC However, one of the entries in the @INC list should be “.”, which means the current directory, whatever that happens to be So if you install the drivers in H:\, for example, any Perl program also in H:\ will find the drivers On

my laptop, the PPM had put DBI.pm and several other files into

C:\Perl\site\lib where they worked successfully Packages in this folder will

be found by any Perl program wherever it is stored on your computer

There are quite a few files installed by PPM, and I don’t know which are essential and which are not So I zipped them all into the two zip archive files

If you are short of space or obsessive about tidiness, I think you need to keep the sub-folders auto\, DBI\ and DBD\ which this process creates, but you can delete the sub-folders Bundle\ and MySQL\ If something stops working, extract the files again from the zip archive

If this installation process doesn’t work, try a different workstation in the lab We have previously found the occasional mis-configured machine

Method 2 – using the PPM

This method is better if you can use it, because it is easier and more likely to continue

to work when Perl versions or installations change This method should work for a version of ActivePerl that you have installed on your own PC It will not work on the COMSC machines, where PPM does not seem to work properly In that case use

“Method 1” above

Install the DBI database interface package and the MySQL database driver DBD-mysql as follows: Make sure you are connected to the Internet, as this procedure will download the packages

If you have installed ActiveState Perl as recommended on your own PC, you should have an entry called “ActiveState ActivePerl 5.6” or “ActivePerl 5.8.7 Build 813” in the All Programs section of your Windows Start menu Click on that menu item, then

on Perl Package Manager

A Command Prompt window will open, and after a delay of as long as two minutes a heading and a “ppm>” prompt will appear You can type “help”, or just follow these instructions: Type

install DBI

and then press “y” and the Enter key to say yes to the question This will fetch the

DBI package from somewhere on the Net, install it and print some messages,

hopefully ending with “Successfully installed ” But you haven’t

finished yet:

install DBD-mysql

Trang 4

This will install the DBD-mysql package and print some messages, hopefully also ending with “Successfully installed ”, and finally

exit

will shut down the Perl Package Manager

Notes on installing DBI and DBD-mysql

1 There are two ways to start the ActiveState Perl Package Manager (PPM) – you can use either One is to click on its entry in the Start menu as described above (All Programs, ActivePerl ) The other is to open up a Command Prompt

window However, I suspect that both methods end up running the same program

- the Start menu method just opens a command prompt and starts the ppm

program in it The command line version can be run in the Command Prompt Window in two ways, either by starting the PPM program without specifying any command by typing just

ppm

to start the Manager, and then while it is running (at the ppm> prompt, which appears after a long delay) issue the PPM install commands as shown above,

or you can issue each command in a separate run of PPM, by typing the full version of the commands, with an initial “ppm ”, which will run each PPM

command separately at the Windows command prompt, without requiring “y” to

be pressed For example,

ppm install DBI

2 If you can’t run DatabaseDemo.pl or DatabaseTest.pl after trying to install the DBI and the DBD-mysql driver using the Perl Package Manager, make sure you followed the instructions carefully and installed both packages

If you have only installed the DBI package, the Perl database test program will say, amongst other things,

Can't locate DBD/mysql.pm in @INC

This is because the DBI package doesn’t contain the actual driver, that is the instructions specific to a particular database system, such as, in our case, MySQL You need to install the DBD-mysql package as well, as explained above

3 You can check which modules are currently installed using

ppm query db*

which will list all modules starting with “db”, including the two we want

4 If you get the error message

Can't use an undefined value as a hash reference at mysql.pm line 113

Trang 5

then this may be caused by using an older version of DatabaseDemo.pl

Although I tested that version successfully in Linux, it doesn’t work in Windows using the ActivePerl versions described here I have modified the current version, and DatabaseTest.pl, by adding an additional parameter (consisting of a pair

of curly braces, representing an empty hash) at the end of the connect function call This extra parameter has no effect, and isn’t needed in some versions of the

DBD-mysql package, but seems to be required for the ActivePerl versions

obtained as described above You can download the new DatabaseDemo.pl

program from Blackboard, by going to the “Perl stuff” folder in Course

Documents, or go straight to

http://users.cs.cf.ac.uk/R.J.White/perl/

5 You can un- install the packages so that you can try again, using the commands:

ppm uninstall DBD-mysql

ppm uninstall DBI

When you reinstall:

ppm install DBD-mysql

then test the DatabaseDemo.pl program after the first package is installed

ppm install DBI

and test again after the second package is installed Email both error messages to

me if this still doesn't work

6 PPM thinks it knows where things should be put In particular, DBI.pm should reside in a directory which is listed in the array @INC You can list this array from the command line, without creating a whole new Perl program to do it, by typing

perl -e 'print join "\n", @INC;'

The -e means “Here is a complete Perl program, not a filename” The join

function separates the elements in the list @INC with, in this case, new line

characters, so that each directory in @INC is put on a separate line - without this you get a real mess In Linux, one of these is often

/usr/lib/perl5/site_perl, and in Windows C:\Perl\site\lib should

be one of the locations These are the places where Perl will look when it needs to find a module or packages that you are trying to use, such as DBI.pm You can look to see whether PPM has put the modules DBI.pm into this folder, and

mysql.pm into the sub- folder DBD in this folder

Footnote

If you’ve been having problems getting the DatabaseDemo.pl program to work, please let me know what worked and what didn’t, otherwise it’s hard to know what’s going wrong Thanks

Ngày đăng: 29/04/2014, 14:45

TỪ KHÓA LIÊN QUAN

w