2017-05-16 29 views
-3

MySQL 데이터베이스에 연결하려고합니다.DBI를 사용하여 MySQL 데이터베이스에 연결

이 스크립트를 발견했으며 PC 및 웹 호스트에서이 스크립트를 사용하려고하지만 출력이 표시되지 않습니다.

이 코드를 살펴보십시오. 나는 xampp에서 펄을 돌리고있다.

#!C:\xampp\perl\bin\perl.exe 

print "Content-type: text/html\n\n"; 

use DBI; 
use strict; 

my $driver = "localhost"; 
my $database = "data"; 
my $dsn  = "DBI:$driver:database = $database"; 
my $userid = "root"; 
my $password = ""; 

my $dbh = DBI->connect($dsn, $userid, $password) or die $DBI::errstr; 

PHP와 동일한 데이터베이스를 사용하고 있습니다.

+5

출력의 어떤 종류의 당신이보고 기대? 보이지 않는 헤더 만 인쇄하고 있습니다! –

+0

웹 서버 로그에 아무 것도 없습니까? – choroba

+0

누군가가 내 질문에 대답하면 [* 어떻게해야합니까?] (* http://stackoverflow.com/help/someone-answers) – Borodin

답변

3

그러나 출력이 표시되지 않습니다.

표시 할 CGI 헤더로 판단 할 때 CGI 프로그램으로 실행한다고 가정합니다. 어떤 경우에도 출력을 보지 않고 놀랍지 만 출력을 보내지 않습니다.

명령 줄 프로그램으로 실행 한 경우 (그리고 CGI 프로그래밍으로 건너 뛰기 전에 명령 줄에서 작업하는 것이 좋을 때) "Content-Type"헤더가 표시됩니다. 또는 프로그램에 출력을 추가하여 브라우저에 표시되는지 확인할 수도 있습니다. 간단한 비슷해 : 나는 또한 추가 할

print 'It works!'; 

, 즉 CGI 요즘 오히려 오래된 모양과 펄과 웹 응용 프로그램을 작성하는 방법 (있는 내가 더 쉽고 더 강력한 의미) 훨씬 더있다. 사용할 수있는 아이디어를 얻으려면 CGI::Alternatives을 읽어보십시오.

업데이트 : 난 그냥 (안 사람들에게 이야기하지 않고 교차 게시물을 해주세요) 페이스 북에 질문이 질문을 본 적이 그리고 난 당신의 $driver 변수가 잘못된 것으로 나타났습니다

. MySQL에 연결하는 경우 $driver은 "mysql"이어야합니다 (DBI가 "DBD :: mysql"을로드하도록). MySQL의 드라이버

3

에서 DSN은 hostport 필드는 선택 사항이

DBI:mysql:database=$database;host=$hostname;port=$port 

것 같습니다. 합니다 (database은 선택 사항이지만, 당신은을 떠나고 싶어하지 않습니다.) 여러 가지 난해한 옵션도 있습니다,하지만 그들은

여기에 관련이있어하지만 당신은

DBI:localhost:database = data 

을 공급중인 MySQL 연결을 지정하지 않으므로 작동하지 않는다면 놀라지 않을 것입니다! 공백이 합법적인지 여부는 알 수 없지만 문서를 보관할 수는 있습니다.

당신은 당신이 원하는 경우 기본값입니다 localhost로 (당신은? "드라이버"호스트 이름을 불리는 이유) 당신은 ;host=$driver을 제거 할 수

my $dsn = "DBI:mysql:database=$database;host=$driver" 

에 그 문을 변경해야합니다.단지 데이터베이스 이름을 지정하고 다른 모든 필드에 대한 기본값을 사용하는 DSN은

my $dsn = "DBI:mysql:$database" 

그냥 몇 가지 출력을 생성하기 위해 처음 print 문을 작성하는 것이 더 쉬울 수 있습니다에 계약을 체결 할 수있다. text/html 대신 text/plain이라는 MIME 콘텐츠 형식 헤더를 인쇄하려고합니다.

-1

당신이 추가 할 수 브라우저에 표시되지 않습니다 표준 에러에 후자 쓰기로, 지금 대신 die에 대한 print "$DBI::errstr\n"을 시도해보십시오

if ($dbh) { 
print 'connect ok'; 
} else { 
print 'connect failed'; 
} 
+0

어떻게 도움이 될까요? '! $ dbh'는 이미'죽습니다. –

+0

네, 맞습니다. 나는 최근 몇 년 동안 죽을 사용을 중단했다. 나는 단지 경고하는 대신 오류에 반응하는 것을 선호한다. –