#!/usr/bin/perl
print "content-type:text/html\n\n";
print "<html><body>";
use CGI;
use DBI;
use CGI qw(:standard);
use CGI::Carp qw(fatalsToBrowser);
$db="New";
$user="root";
$password="isRovss*%1u";
$host="localhost";
$dbh=DBI->connect("DBI:mysql:database=$db:$host",$user,$password) ||
die "couldnt open database:$DBI :: errstr";
$sth=$dbh->prepare("select * from stud");
$rv=$sth->execute();
print "<table>";
print "<tr><th>id</th></tr><tr><th>name</th></tr><tr><th>age</th>
</tr>";
while (@row = $sth->fetchrow_array()) {
$id=$row[0];
$name=$row[1];
$age=$row[2];;
}
print "<tr><td>$id</td></tr><tr><td>$name</td></tr><tr><td>$age</td>
</tr>";
print "</table>";
$rc=$sth->finish();
print "Database closed";
print "</body></html>";
Я пытаюсь подключить базу данных mysql с помощью Perl. Я использую Mac OS, и он говорит: "Не удалось подключиться к базе данных".
Использование кода im используется выше. Пожалуйста, помогите мне.
Посмотрите документацию DBI
$dbh = DBI->connect($data_source, $username, $password, \%attr) or die $DBI::errstr;
Сравните с вашим кодом:
$dbh=DBI->connect("DBI:mysql:database=$db:$host",$user,$password) || die "couldnt open database:$DBI :: errstr";
Вы поместили $DBI::errstr
внутри строкового литерала и добавили пробелы.
Это означает, что ваш код сообщения об ошибках попытается попытаться :: errstr
отчет $DBI
(за которым следует :: errstr
) вместо переменной, содержащей ошибку.
Исправьте это, и вы можете узнать, что на самом деле не так:
$dbh=DBI->connect("DBI:mysql:database=$db:$host",$user,$password)
|| die "couldnt open database:" . $DBI::errstr;
Использование CGI здесь является ненужным отвлечением. Я рекомендую вам попробовать написать программу, отличную от CGI, которая сначала подключается к базе данных, и когда вы ее заработаете, вы можете скопировать тот же код соединения в свою программу CGI.
На самом деле, даже до этого вы должны убедиться, что можете использовать данные о соединении для подключения к серверу MySQL с использованием стандартных инструментов MySQL.
Что произойдет, если вы откроете окно командной строки и запустите следующее:
mysql -h localhost -u root -p -D New
Почти наверняка это проблема с подключением к базе данных и не имеет ничего общего с Perl или CGI.
mysql
и тех же учетных данных?use strict
иuse warnings
в начало вашего кода, а затем объявить переменные с помощьюmy
.