2013-03-07 64 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)它会告诉你为什么数据库连接失败。 (该数据库的错误信息将在$!。)

我也删除了变量周围的双引号,因为它们不是必需的。

相关问题