【问题标题】:Perl and MYSQL - Select data between year-month-day hour:minute:seconds (unix?) style timestampsPerl 和 MYSQL - 在年-月-日时:分:秒(unix?)样式时间戳之间选择数据
【发布时间】:2013-02-23 08:09:23
【问题描述】:

我整天都在寻找答案,并尝试了我所有的想法。 我正在做的事情看似容易,但对我来说非常困难。 我必须这样做,而无需安装额外的 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 将结果打印到页面上。我相信这与日期格式有关。不,我无法更改数据库中的日期格式。

非常感谢。

【问题讨论】:

  • 您的错误表明 connect() 调用失败。您能否使用 Perl DBI 执行任何成功的查询?
  • @Josh 我会仔细检查。
  • 您的$sdb 字符串是什么样的?有点像dbi:mysql:your_database?正如乔希所说,连接似乎失败了。添加die 并查看错误消息。 ($names = DBI->connect("$sdb","$user","$password") or die $DBI::errstr;)
  • 是的,这是第一个问题。很奇怪。不是远程的,但是本地主机也是如此。在同一个目录中,我有另一个脚本使用相同的代码连接到远程服务器,没有问题。这个只是无法连接到它的服务器!尝试了ip,域和localhost无济于事。 ($sdb = 'DBI:mysql:root_db1:localhost:3306';) 我会回复你的。

标签: mysql perl date


【解决方案1】:
$names = DBI->connect("$sdb","$user","$password");

应该是

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

添加or die... 部分有两个目的:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-15
    • 1970-01-01
    • 2012-03-17
    • 2012-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多