-2

我试图回显从特定日期( CURDATE() )还剩多少分钟。

我就是这样做的:

public function getTimeLeft($ip)
{
    $this->get = $this->pdo->prepare("SELECT DATE_FORMAT(TIMEDIFF(CURDATE(), 'nextVote')); FROM auths WHERE voter_ip = :ip");
    $this->get->execute(array(":ip" => $ip));
}

错误:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1582 Incorrect parameter count in the call to native function 'DATE_FORMAT'' in C:\xampp\htdocs\vote\includes\class\Vote.class.php:174 Stack trace: #0 C:\xampp\htdocs\vote\includes\class\Vote.class.php(174): PDOStatement->execute(Array) #1 C:\xampp\htdocs\vote\index.php(644): Vote->getTimeLeft('127.0.0.1') #2 {main} thrown in C:\xampp\htdocs\vote\includes\class\Vote.class.php on line 174

这种语法有什么问题?

4

2 回答 2

1

CURDATE() 只返回没有任何时间的日期。DATE_FORMAT 还需要第二个参数来指定您想要的格式。即'%m-%d-%Y %T'。

您可以通过以下几种方式做到这一点:

使用 TIMEDIFF

SELECT TIMEDIFF(NOW(), `nextVote`)
FROM auths
WHERE `voter_id` = :ip

回报:

-71:27:44

如果你只想要分钟,你可以使用 TIMESTAMPDIFF

SELECT TIMESTAMPDIFF(MINUTE, `nextVote`, NOW())
FROM auths
WHERE `voter_id` = :ip

回报:

-4288

注意:TIMEDIFF(a, b) 是 ab,而 TIMESTAMPDIFF(unit, a, b) 是 ba。

于 2013-05-12T20:14:58.783 回答
1
  • 您可以使用分号分隔多个 SQL 语句;,但我不会在您的查询中间放置一个!
  • DATE_FORMAT接受两个参数。第二个是格式字符串
  • 'nextVote'是字符串文字,尝试 nextVote 或 `nextVote` 作为列名
  • curdate()返回日期。用于now()完整的日期和时间。 有关示例,请参见此处。

所以可以尝试类似的东西:

SELECT  DATE_FORMAT(TIMEDIFF(NOW(), nextVote), '%b %d %Y %h:%i %p')
FROM    auths 
WHERE   voter_ip = :ip
于 2013-05-12T19:19:39.033 回答