SQL语法错误PHP

时间:2013-05-12 18:47:20

标签: php sql

我正在尝试回复特定日期(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

这种语法有什么问题?

2 个答案:

答案 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。