我正在尝试回复特定日期(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
这种语法有什么问题?
答案 0 :(得分:1)
;
分隔多个SQL语句,但我可以
不会把一个放在你的查询中间!DATE_FORMAT
有两个参数。第二个是format string。'nextVote'
是一个字符串文字,请尝试nextVote或`nextVote`作为列名curdate()
返回日期。使用now()
获取完整的日期和时间。 See here for an example. 所以可以试试像:
SELECT DATE_FORMAT(TIMEDIFF(NOW(), nextVote), '%b %d %Y %h:%i %p')
FROM auths
WHERE voter_ip = :ip
答案 1 :(得分: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)是a-b而TIMESTAMPDIFF(单位,a,b)是b-a。