2013-01-03 75 views
2

當我在phpmyadmin中運行以下查詢時,我得到18個結果 - 所有這些結果都是正確的,我在找什麼。但是,當我複製&將查詢粘貼到一個php文件並運行該頁面時,我找回了17個結果。即使查詢結果相同,PHP返回的結果也少於phpmyadmin

SELECT 
    ta.jobTaskID, 
    jt.customTaskTitle, jt.taskID, jt.status, 
    d.dealershipName, 
    j.jobNumber, j.jobID, j.title, j.jobSpec, 
    wt.taskName, 
    po.dueToProduction 
FROM taskassignments ta 
INNER JOIN jobTasks jt ON ta.jobTaskID = jt.jobTaskID 
INNER JOIN jobs j ON jt.jobID = j.jobID 
INNER JOIN dealerships d ON j.dealershipID = d.dealershipID 
LEFT JOIN workflowtasks wt ON jt.taskID = wt.taskID 
LEFT JOIN purchaseorders po ON j.jobID = po.jobID 
WHERE ta.userID = 1 AND jt.status != 'Completed'; 

編輯:Here's a snapshot of my phpmyadmin resulthere's a snapshot of my var_dump

這是我的PHP代碼(我用我創建了一個DB類)

$myTasks = $connection->runQuery(" 
SELECT 
    ta.jobTaskID, 
    jt.customTaskTitle, jt.taskID, jt.status, 
    d.dealershipName, 
    j.jobNumber, j.jobID, j.title, j.jobSpec, 
    wt.taskName, 
    po.dueToProduction 
FROM taskassignments ta 
INNER JOIN jobTasks jt ON ta.jobTaskID = jt.jobTaskID 
INNER JOIN jobs j ON jt.jobID = j.jobID 
INNER JOIN dealerships d ON j.dealershipID = d.dealershipID 
LEFT JOIN workflowtasks wt ON jt.taskID = wt.taskID 
LEFT JOIN purchaseorders po ON j.jobID = po.jobID 
WHERE ta.userID = " . $userID . " AND jt.status != 'Completed'"); 

最後,這裏是連接類使用運行查詢的代碼:

// runs the user defined query 
public function runQuery($runMe) 
{ 
    $outArray = array(); 
    if ($this->checkConnection()) // if the connection is a resource 
    { 
     $returned = mysql_query($runMe, $this->dbConnection); 
     if ($returned === false) // if there was an error during sql execution 
     { 
      echo "SQL Query error: " . mysql_error(); 
     } 

     if ($returned === true) // if a update, insert, delete, etc... command was run 
      return true; 
     if (is_resource($returned)) 
     { 
      $outArray = array(); // returned array with query results 
      for ($i = 0; $i < mysql_num_rows($returned); $i++) 
      { 
       $outArray[] = mysql_fetch_assoc($returned); 
      } 
     } 
     if (count($outArray) < 1) 
      return null; 
     else 
      return $outArray; 
    } 
     else 
      echo "Your Database Connection Was Unable To Be Authenticated."; 
    } 
+1

請顯示您的PHP代碼。 – eggyal

+3

顯示你的php代碼,你可能在某處放置一行。例如做$ row = fetch(); while(...){$ row = fetch();打印$行; }' –

回答

0

嘗試更換這行:

for ($i = 0; $i < mysql_num_rows($returned); $i++) 

有了:

for ($i = 0; $i < mysql_num_rows($returned) + 1; $i++) 
+4

你可以使用<=來比較而不是增加cound等等,這很容易 –

+0

@DaGhostmanDimitrov好點! – pzirkind

+0

當我這樣做時,我得到正確的條目數,但最後一個總是「假」。它也搞亂了使用連接類的網站的其他部分...... I.E. - 我的數據庫驅動的導航項目在它們的最後有一個額外的(虛假)項目。 – Brds

0

由於您只檢查$i是否小於mysql_num_rows($returned),因此您最後一行將被跳過。你應該在哪裏檢查它是否小於或等於。

所以,你將需要更改以下行:

for ($i = 0; $i < mysql_num_rows($returned); $i++) 

for ($i = 0; $i <= mysql_num_rows($returned); $i++) 

,然後你會得到所有的數據返回到您的PHP如你所願。

+0

最後一項現在是False ...雖然正在返回正確數量的項目。 – Brds

+0

mysql_num_rows返回項目的數量...因此可以說有10個項目被髮回......我的聲明是說「$ i <10」...然後將從0到9 ...這是正確的。做「$ i <= 10」會尋找一個不存在的元素。 – Brds

1

更好的解決辦法是不使用mysql_num_rows()在所有,只是不斷的打電話mysql_fetch_assoc()反覆,直到它停止返回結果:

$outArray = array(); 
while ($row = mysql_fetch_assoc($returned)) { 
    $outArray[] = $row; 
} 

(詩只是讓你知道,original PHP mysql API,你的代碼正在使用,自PHP 5.5.0起棄用,並且將在未來版本中刪除。您應該移至one of the supported APIs,要麼mysqli要麼PDO。)

+0

給我回到我以前得到的結果... 1比我需要的少。 – Brds

+0

@Brds:那麼你的PHP查詢確實只返回17個結果。如果SQL文本完全相同,則差異必須位於其他位置。你確定你正在對同一個數據庫中的同一個表使用同一個用戶運行兩個查詢嗎? (我特別要問的原因是缺少的行似乎是一個測試記錄,也許您的PHPMyAdmin查詢針對數據庫的測試副本運行,而PHP代碼直接訪問生產數據庫?) –

+0

看來在db類中斷開連接是SOMEWHERE。我結束了與mysql_query()運行查詢,它工作得很好。雖然看課,但我找不到任何不同的東西。 – Brds

0

嘗試清除al內循環使用的循環後未設置調用函數L陣列來清除所有的數組一樣

while(){ 
//your code 
} 
unset(array); 

這將解決你的問題,因爲它解決了我的。