2010-03-30 78 views
3

我遇到了這個PHP函數的問題。它保持返回零,但我知道SQL語句的工作原理,因爲我自己查詢過它。任何想法我做錯了什麼?最後一行對我來說沒有意義......我在編輯別人寫的代碼。這個函數應該返回一個數字,假設日期是三月。謝謝!PHP函數返回ZERO

function getCountBetweenDays($day1,$day2,$service) 

{ 

    global $conn; 

    if ($service==1){ 

$query = "SELECT COUNT(*) as NUM FROM `items` WHERE `modified` BETWEEN '$day1 00:00:00' AND '$day2 23:59:59';";} 



    elseif($service==2){ 

$query = "SELECT COUNT(*) as NUM FROM `items` WHERE `modified` BETWEEN '$day1 00:00:00' AND '$day2 23:59:59';";} 



     elseif($service==3){ 

$query = "SELECT COUNT(*) as NUM FROM `items` WHERE `modified` BETWEEN '$day1 00:00:00' AND '$day2 23:59:59';";} 

$result = mysql_query($query,$conn); 

    $num = mysql_fetch_array ($result); 

    return $num['NUM']; 

} 
+2

指數我缺少的東西還是真的在查詢沒有區別? – 2010-03-30 22:11:31

+1

在這三種情況下,$ query都包含相同的字符串......是故意的嗎? – VolkerK 2010-03-30 22:11:42

+0

$ day1,$ day2和$ service的值是什麼?你能迴應他們嗎? – 2010-03-30 22:13:25

回答

-1

回報$ NUM [ 'NUM'];

表示返回數組的'num'部分;改變「NUM」 1或2,然後嘗試

+0

'mysql_fetch_array()'返回一個包含列號和列名的數組。 'mysql_fetch_assoc()'只返回一個包含列名的數組。 – 2010-03-30 22:12:59

+0

@NebNeb Nope,'mysql_fetch_array'在默認情況下提取數字和關聯部分。 – 2010-03-30 22:13:01

+0

默認情況下,'mysql_fetch_array'以數字**和**關聯數組的形式返回結果。所以數組訪問應該工作。 – 2010-03-30 22:13:35

1

對於初學者來說,加

if (!$result) echo mysql_error(); 

每個mysql_query()通話後,看是否有任何錯誤。我很確定有。

+0

試過了,沒有錯誤。 – user305527 2010-03-30 22:16:57

+0

好貼他們然後 – ant 2010-03-30 22:19:02

+0

@ c0mrade他怎麼能發佈沒有錯誤? :D – 2010-03-30 22:20:03

1

您的查詢是不正確格式器,他們是:

"SELECT COUNT(*) as NUM FROM `items` WHERE `modified` BETWEEN '$day1 00:00:00' AND '$day2 23:59:59';"; 

他們應該是:

"SELECT COUNT(*) as NUM FROM `items` WHERE `modified` BETWEEN '$day1 00:00:00' AND '$day2 23:59:59'"; 

你在每個查詢一個額外的分號。並使用or die mysql_error()打印出錯誤。

而且這一部分:

$num = mysql_fetch_array ($result); 

    return $num['NUM']; 

我已經替換爲:

$num = mysql_fetch_array ($result); 

extract($num); 

    return $NUM;//if this is your field name 
+1

這是正確的SQL。它分隔了查詢。雖然沒有必要,但這不是問題的原因。 – 2010-03-30 22:15:22

+0

這應該不成問題。 ';'是查詢分隔符。 – 2010-03-30 22:15:33

+0

爲什麼我正在提供一個男人很少的解決方案,給人一些東西,而不是僅僅拒絕投票dammit – ant 2010-03-30 22:17:03

3

試着在你的函數,例如一些調試輸出

function getCountBetweenDays($day1,$day2,$service) 
{ 
    global $conn; 

    switch($service) { 
    case 1: 
     $query = "SELECT COUNT(*) as NUM FROM `items` WHERE `modified` BETWEEN '$day1 00:00:00' AND '$day2 23:59:59'"; 
     break; 
    case 2: 
     $query = "SELECT COUNT(*) as NUM FROM `items` WHERE `modified` BETWEEN '$day1 00:00:00' AND '$day2 23:59:59'"; 
     break; 
    case 3: 
     $query = "SELECT COUNT(*) as NUM FROM `items` WHERE `modified` BETWEEN '$day1 00:00:00' AND '$day2 23:59:59'"; 
     break; 
    default: 
     die('unknown value for $service'); 
    } 

    echo '<pre>Debug: $query=', htmlspecialchars($query), '</pre>'; 
    $result = mysql_query($query,$conn) or die('mysql_query failed: '.htmlspecialchars(mysql_error($conn))); 
    echo '<pre>Debug: numrows=', mysql_num_rows($result), '</pre>'; 
    $num = mysql_fetch_array($result); 

    return $num['NUM']; 
} 
+0

這涵蓋了他的代碼太多,但仍然+1他最終會得到錯誤,他會更快地更改「可疑」的代碼位 – ant 2010-03-30 22:18:24

+0

我試圖Pekka的帖子,如果這不起作用,我會嘗試你的。謝謝!!! – user305527 2010-03-30 22:25:21

+0

我希望它「類似於」原來的功能就足以成爲「易於理解」;-)請記住,你通常既不想這麼快就退出(使用die()),也不會向每一個實例泄露實際的mysql錯誤字符串用戶在生產代碼中......這只是一個例子。 – VolkerK 2010-03-30 22:25:52

1

修正了它......愚蠢的錯誤。對於PHP和MySQL我很新,很抱歉。

getCountBetweenDays(2010-3-1,2010-3-28,CONT_ALL_SERVICE); 

應該是:

getTweetCountBetweenDays('2010-3-1','2010-3-28',CONT_ALL_SERVICE); 

所有的幫助感謝,我現在知道如何正確地調試!

+0

很高興聽到您解決了它...... – 2010-03-30 22:55:52

+0

非常感謝您的幫助。 – user305527 2010-03-30 22:58:17

0

您正在嘗試引用具有關聯索引['s']的數字索引[n]。無論是指定給你的查詢

mysql_fetch_array($result, MYSQL_BOTH) 

或者只在

mysql_fetch_assoc($result); 

這將讓你引用由協會