Как подключить MySQL с помощью Perl / CGI в Mac OS Sierra?

0
#!/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 используется выше. Пожалуйста, помогите мне.

  • 0
    На этой машине работает база данных? Можете ли вы подключиться к нему через командную строку с помощью команды mysql и тех же учетных данных?
  • 3
    Ваш код очень старомоден. Если вы получили это из книги, пожалуйста, используйте более современную книгу. Он учит вас устаревшим вещам. Вы должны начать с добавления use strict и use warnings в начало вашего кода, а затем объявить переменные с помощью my .
Показать ещё 2 комментария
Теги:
macos

2 ответа

3

Посмотрите документацию 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;
2

Использование CGI здесь является ненужным отвлечением. Я рекомендую вам попробовать написать программу, отличную от CGI, которая сначала подключается к базе данных, и когда вы ее заработаете, вы можете скопировать тот же код соединения в свою программу CGI.

На самом деле, даже до этого вы должны убедиться, что можете использовать данные о соединении для подключения к серверу MySQL с использованием стандартных инструментов MySQL.

Что произойдет, если вы откроете окно командной строки и запустите следующее:

mysql -h localhost -u root -p -D New

Почти наверняка это проблема с подключением к базе данных и не имеет ничего общего с Perl или CGI.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню