2013-05-12 68 views
-2

我想回復從特定日期(CURDATE())剩下多少分鐘。SQL SYNTAX錯誤PHP

那怎麼我已經做到了:

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

''nextVote''被視爲一個字符串,因爲引號。你的意思是'''''''''反推''''反引號'? – 2013-05-12 18:49:09

+0

刪除字符串''後我得到相同的錯誤。 – user2363542 2013-05-12 18:50:28

+9

刪除'FROM'前面的';'。 [MySQL DATE_FORMAT](http://dev.mysql.com/doc/refman/5.1/zh/date-and-time-functions.html#function_date-format)需要2個參數,您只需提供1. – 2013-05-12 18:51:18

回答

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 
+0

這真的值得更多upvotes。 – Kermit 2013-05-12 20:25:39

+0

@FreshPrinceOfSO:謝謝,但我不這麼認爲,在提交我的答案之前,大多數觀點都是在評論中提出的。 – Andomar 2013-05-12 20:32:07

+0

太懶得把它們都讀完。 – Kermit 2013-05-12 20:32:41

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。

+0

+1並歡迎使用堆棧溢出。你可能會考慮更接近這個問題,它沒有提到分鐘選項。 – Andomar 2013-05-12 20:36:41

+0

謝謝。我添加了分鐘選項,因爲在他的問題中「試圖迴應剩下多少分鐘」。 – MikeG 2013-05-13 01:22:15