Perl和MYSQL—选择年-月-日-小时:分钟:秒(unix?)样式的时间戳之间的数据
我一整天都在寻找答案,也尝试了我所有的想法。 我所做的似乎很容易,但对我来说却很难。 我必须在不安装额外Perl模块的情况下执行此操作 我正在尝试选择在两个日期之间输入的姓名列表。 我知道这些例子显然不严格也不安全,但我只是想弄清楚。 等我找到达到所需结果的方法后,我会解决所有这些问题 $to和$from的传入数据示例:Perl和MYSQL—选择年-月-日-小时:分钟:秒(unix?)样式的时间戳之间的数据,mysql,perl,date,Mysql,Perl,Date,我一整天都在寻找答案,也尝试了我所有的想法。 我所做的似乎很容易,但对我来说却很难。 我必须在不安装额外Perl模块的情况下执行此操作 我正在尝试选择在两个日期之间输入的姓名列表。 我知道这些例子显然不严格也不安全,但我只是想弄清楚。 等我找到达到所需结果的方法后,我会解决所有这些问题 $to和$from的传入数据示例: $to= '2013-03-01 00:00:01'; $from= '2013-03-01 23:23:59'; 数据库中输入的列也采用该格式 我试过: $names =
$to= '2013-03-01 00:00:01';
$from= '2013-03-01 23:23:59';
数据库中输入的列也采用该格式
我试过:
$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将结果打印到页面上。我相信这与日期格式有关。不,我无法更改数据库中的日期格式
非常感谢
$names = DBI->connect("$sdb","$user","$password");
应该是
$names = DBI->connect($sdb, $user, $password) or die "Couldn't connect to database: $!";
添加或模具…
零件有两个目的:
1) 它将立即停止您的程序,防止您在以后尝试使用数据库句柄时出现错误,而真正的问题是它无法连接到数据库
2) 它将告诉您数据库连接失败的原因。(数据库的错误消息将显示在$!
中)
我还删除了变量周围的双引号,因为它们不需要。您的错误表明connect()调用失败。你能用Perl DBI执行任何成功的查询吗?@Josh我会仔细检查。你的$sdb
字符串是什么样子的?类似于dbi:mysql:your_数据库
?正如Josh所说,连接似乎失败了。添加一个die
并查看错误消息。($names=DBI->connect(“$sdb”、“$user”、“$password”)或die$DBI::errstr;
)是的,这是第一个问题。很奇怪。不是远程的,而是本地主机。在同一个目录中,我有另一个脚本连接到远程服务器,代码相同,没有问题。这台电脑无法连接到它的服务器!尝试了ip、域和本地主机,但无效。($sdb='DBI:mysql:root_db1:localhost:3306';)我会再打给你。