0

我整天都在寻找答案,并尝试了我所有的想法。我正在做的事情看似容易,但对我来说非常困难。我必须这样做而不安装额外的 Perl 模块。

我正在尝试选择在两个日期之间输入的名称列表。我知道这些示例显然不严格或不安全,但我只是想弄清楚。一旦我找到了达到所需结果的方法,我将在稍后解决所有这些问题。

$to 和 $from 的传入数据示例:

$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 将结果打印到页面上。我相信这与日期格式有关。不,我无法更改数据库中的日期格式。

非常感谢。

4

1 回答 1

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

应该

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

添加or die...零件将有两个目的:

1)它会立即停止您的程序,防止您以后尝试使用数据库句柄时出现虚假错误,而真正的问题是它无法连接到数据库。

2)它会告诉你为什么数据库连接失败。(数据库的错误信息将在$!.)

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

于 2013-03-08T09:34:33.280 回答