2011-10-26 134 views
1

這裏地處/ perl的-bin /目錄,但由於某種原因,我的Perl代碼當我嘗試從MySQL獲得的東西我不斷收到錯誤500爲什麼我用這個Perl代碼得到錯誤500?

這裏是代碼

#! /usr/bin/perl 

use warnings; 
use strict; 

print "Content-type: text/html\n\n"; 
print "<!DOCTYPE html>\n"; 
print "<html>\n"; 
print "<head>\n"; 

print "<title>00000000000000000000</title>"; 
print "<link rel='stylesheet' type='text/css' href='style.css' />"; 

print "</head>\n"; 
print "<body>\n"; 

print "<div id='top'></div>"; 
print "<div id='header'>"; 
print "<div id='logo'></div>"; 

print "</div>"; 

use Mysql; 

# MYSQL CONFIG VARIABLES 
$host = "localhost"; 
$database = "000_ooo"; 
$tablename = "users"; 
$user = "000_root"; 
$pw = "l00V0r009;00XE_%0q;U00000000000000"; 

# PERL MYSQL CONNECT() 
$connect = Mysql->connect($host, $database, $user, $pw); 

# SELECT DB 
$connect->selectdb($database); 

# DEFINE A MySQL QUERY 
$myquery = "SELECT * FROM $tablename"; 

# EXECUTE THE QUERY FUNCTION 
$execute = $connect->query($myquery); 

# HTML TABLE 
print "<table border='1'><tr> 
<th>id</th> 
<th>product</th> 
<th>quantity</th></tr>"; 

# FETCHROW ARRAY 

while (@results = $execute->fetchrow()) { 
    print "<tr><td>" 
    .$results[0]."</td><td>" 
    .$results[1]."</td><td>" 
    .$results[2]."</td></tr>"; 
} 

print "</table>"; 

print "</body>\n"; 
print "</html>\n"; 
+6

你有沒有試過看你的網絡服務器的錯誤日誌?你有沒有試過從命令行運行它? – cjm

+0

我沒有訪問命令行,我沒有看到任何日誌 –

+6

然後拒絕做任何更多的工作,直到你的客戶或經理給你一個合理的工作環境:-) –

回答

8

你可以試試使用CGI::Carp在瀏覽器中收到一條錯誤消息:

use CGI::Carp qw(fatalsToBrowser); 

(不要調試完畢後,除非你想你的用戶,查看可能泄露機密神祕的錯誤消息離開這個英寸)

你確定Mysql模塊是訪問數據庫的正確方法嗎?該模塊已過時;現在每個人都使用DBI(可能還有另外一層)。您可以嘗試一個只有use Mysql;的Hello World類型腳本,但不會嘗試實際連接到數據庫,以查看它是否已安裝。

1

我同意@cjm。您應該至少使用DBI模塊。另外,爲了美觀,在任何其他代碼之前,最好將所有「使用」語句放在代碼的頂部。

我會確定的另一件事是,您使用的用戶名和密碼實際上工作。嘗試通過命令行登錄到MySQL,如果他們這樣做,連接到數據庫,並確保表存在。將這些變量也排除在等式之外。

+0

所有與mysql相關的信息都是正確的,它已經通過PHP –

5

一個簡單的語法檢查揭示了這個問題。

$ perl -c mysql 
Global symbol "$host" requires explicit package name at mysql line 26. 
Global symbol "$database" requires explicit package name at mysql line 27. 
Global symbol "$tablename" requires explicit package name at mysql line 28. 
Global symbol "$user" requires explicit package name at mysql line 29. 
Global symbol "$pw" requires explicit package name at mysql line 30. 
Global symbol "$connect" requires explicit package name at mysql line 33. 
Global symbol "$host" requires explicit package name at mysql line 33. 
Global symbol "$database" requires explicit package name at mysql line 33. 
Global symbol "$user" requires explicit package name at mysql line 33. 
Global symbol "$pw" requires explicit package name at mysql line 33. 
Global symbol "$connect" requires explicit package name at mysql line 36. 
Global symbol "$database" requires explicit package name at mysql line 36. 
Global symbol "$myquery" requires explicit package name at mysql line 39. 
Global symbol "$tablename" requires explicit package name at mysql line 39. 
Global symbol "$execute" requires explicit package name at mysql line 42. 
Global symbol "$connect" requires explicit package name at mysql line 42. 
Global symbol "$myquery" requires explicit package name at mysql line 42. 
Global symbol "@results" requires explicit package name at mysql line 52. 
Global symbol "$execute" requires explicit package name at mysql line 52. 
Global symbol "@results" requires explicit package name at mysql line 54. 
Global symbol "@results" requires explicit package name at mysql line 55. 
Global symbol "@results" requires explicit package name at mysql line 56. 
mysql had compilation errors. 

您的程序包括use strict(因爲它應該)。但是你還沒有宣佈你的任何變量。

+0

進行了測試,即使我刪除了嚴格的使用,但我似乎擁有所有需要的模塊,DBD :: Pg(2.18.1),DBD :: SQLite(1.31) ,DBD :: SQLite2(0.33),DBD :: mysql(4.019),DBI(1.616) –

+1

不要刪除'strict'。通過聲明變量來解決問題。 需要模塊的列表是什麼?你不使用任何這些模塊。你使用Mysql.pm。它看起來像Mysql.pm曾經是DBD :: mysql發行版的一部分,但它大約在五年前被刪除。這個程序在您將其更改爲使用DBI和DBD :: mysql之前不會起作用。 –