2013-03-07 63 views
0

我看了一整天的答案並嘗試了我所有的想法。 我在做什麼看起來很簡單,但對我來說非常困難。 我必須在不安裝其他Perl模塊的情況下執行此操作。Perl和MYSQL - 在年,日,月,小時之間選擇數據:分鐘:秒(unix?)樣式時間戳

我想選擇兩個日期之間輸入的名稱列表。 我知道這些例子顯然不嚴格或安全,但我只是想弄明白。 一旦我找到了解決我所需結果的方法,我會解決所有這些問題。

爲$到和$從傳入的數據例如:

$to= '2013-03-01 00:00:01'; 
$from= '2013-03-01 23:23:59'; 

在數據庫中的entered列是該格式爲好。

我想:

$names = DBI->connect("$sdb","$user","$password"); 
    $getnames = $names->prepare(qq{SELECT DISTINCT `name` 
    FROM `users` 
    WHERE `entered` 
    BETWEEN UNIX_TIMESTAMP($from) 
    AND UNIX_TIMESTAMP($to) 
    AND `active` = ? 
    AND `confirmed` = ? 
    ORDER BY `entered` DESC}); 
    $getnames->execute($active,$confirmed); 

而且我想:

$names = DBI->connect("$sdb","$user","$password"); 
    $getnames = $names->prepare(qq{SELECT DISTINCT `name` 
    FROM `users` 
    WHERE `entered` BETWEEN ? 
    AND ? 
    AND `active` = ? 
    AND `confirmed` = ? 
    ORDER BY `entered` DESC}); 
    $getnames->execute($from,$to,$active,$confirmed); 

我也嘗試了以上兩種的許多變化,但是,我不斷收到:

Can't call method "prepare" on an undefined value at users-by-date.pl line 120 even when I hard code the variables. 

可有人表演我該怎麼做?我的查詢在phpmyadmin中執行得很好,但是,我需要將結果打印到使用Perl的頁面中。我相信這與日期格式有關。不,我無法更改數據庫中的日期格式。

非常感謝。

+3

您的錯誤表明connect()調用失敗。你能用Perl DBI執行任何成功的查詢嗎? – Josh 2013-03-07 22:22:38

+0

@Josh我會仔細檢查。 – OldDogLearningNewPerlTricks 2013-03-07 22:26:15

+2

你的'$ sdb'字符串是怎麼樣的?有點像'dbi:mysql:your_database'?正如喬什所說,連接似乎失敗了。添加一個「die」並查看錯誤消息。 ('$ names = DBI-> connect(「$ sdb」,「$ user」,「$ password」)或者死於$ DBI :: errstr;') – Demnogonis 2013-03-07 22:26:39

回答

2
$names = DBI->connect("$sdb","$user","$password"); 

應該

$names = DBI->connect($sdb, $user, $password) or die "Couldn't connect to database: $!"; 

添加or die...部分將服務於兩個目的:

1),它會立即停止你的程序,阻止您獲得虛假的錯誤後,當您嘗試使用數據庫句柄,當真正的問題是它無法連接到數據庫。

2)它會告訴你爲什麼數據庫連接失敗。 (該數據庫的錯誤信息將在$!。)

我也刪除了變量周圍的雙引號,因爲它們不是必需的。

相關問題