2016-07-07 42 views
0

我有這樣的代碼:如何處理PHP的SELECT 1的結果?

$db 
->prepare("SELECT 1 
      FROM (SELECT count(*) AS num_week, 
         sum(date_time > unix_timestamp(DATE_SUB(now(), INTERVAL 1 day))) as num_day, 
         sum(date_time > unix_timestamp(DATE_SUB(now(), INTERVAL 1 hour))) as num_hour, 
         sum(date_time > unix_timestamp(DATE_SUB(now(), INTERVAL 1 minute))) as num_1min 
        FROM resend_pass 
        WHERE user_id = ? 
        AND date_time > unix_timestamp(DATE_SUB(now(), INTERVAL 1 WEEK)) 
       ) a 
      WHERE num_week < 12 AND num_day < 6 AND num_hour < 4 AND num_1min < 1;") 
->execute(array($id)); 

那麼我該如何使用我查詢的結果?當WHERE條款的所有條件爲時,返回1或者在出現問題時爲空。那麼我需要知道如何處理以SELECT 1開頭的查詢結果?

+0

注意,如果'date_time'是'DATETIME'然後查詢不應該使用'UNIX_TIMESTAMP()'這需要一個日期作爲參數,但在Unix紀元時間返回一個數值。 'SELECT 1 AS over_limit FROM ...'會給你的輸出列起一個名字。 –

回答

0

你甚至都不需要知道結果是什麼,因爲你只看到一個1反正,因此,所有你需要做的就是看看是否有結果(多少):PDOStatement::rowCount

$stmt = $db 
->prepare("SELECT 1 
      FROM (SELECT count(*) AS num_week, 
         sum(date_time > unix_timestamp(DATE_SUB(now(), INTERVAL 1 day))) as num_day, 
         sum(date_time > unix_timestamp(DATE_SUB(now(), INTERVAL 1 hour))) as num_hour, 
         sum(date_time > unix_timestamp(DATE_SUB(now(), INTERVAL 1 minute))) as num_1min 
        FROM resend_pass 
        WHERE user_id = ? 
        AND date_time > unix_timestamp(DATE_SUB(now(), INTERVAL 1 WEEK)) 
       ) a 
      WHERE num_week < 12 AND num_day < 6 AND num_day < 4 AND num_1min < 1;"); 
$stmt->execute(array($id)); 
if($stmt->rowCount() > 0) { 
    // Your code 
} 
+0

我明白了,謝謝+1。['columnCount'](http://php.net/manual/en/pdostatement.columncount.php)怎麼樣? –

+1

完全相反,如果可以簡單地獲取行,則甚至不需要知道返回的行數。當然,你永遠不應該選擇更多的行比你要獲取更多的行 –

+0

@YourCommonSense我寫這個查詢的目的是檢查迄今已發送給用戶的電子郵件的數量。我的意思是用戶每分鐘可以收到1封電子郵件,每小時收到4封電子郵件,等等。我該怎麼做? –

0

當您只選擇一行包含單個值的行時,您必須使用fetchColumn()。
請注意,您不能使用方法鏈接與vanila PDO SELECT查詢

$stmt = $db->prepare("SELECT 1 whatever"); 
$stmt->execute(array($id)); 
$result = $stmt->fetchColumn(); 
+0

我明白了。謝謝+1 ..只是這種鏈接'SELECT'查詢會很好? '$ sth = $ db-> prepare(「query」) - > execute(); $ rows = $ sth-> fetch();' –