簡體   English   中英

即使查詢相同,PHP返回的結果也比phpmyadmin少

[英]PHP returning less results than phpmyadmin even though the query is the same

當我在phpmyadmin中運行以下查詢時,我得到18個結果-所有這些都是正確的以及我正在尋找的東西。 但是,當我將查詢復制並粘貼到php文件中並運行該頁面時,我得到了17個結果。

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';

編輯: 這是我的phpmyadmin結果 的快照,這是我的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.";
    }

更好的解決方案是不使用mysql_num_rows() 所有,而只是不斷的打電話mysql_fetch_assoc()直到它停止返回結果:

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

(請注意。您知道,您的代碼正在使用的原始PHP mysql API從PHP 5.5.0開始不推薦使用,並將在將來的某些版本中刪除。您確實應該使用一種受支持的API ,即mysqliPDO 。)

嘗試替換此行:

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

附:

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

由於僅檢查$i是否小於mysql_num_rows($returned)因此跳過了最后一行。 您應該在哪里查看它是否小於或等於。

因此,您需要更改以下行:

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

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

然后,您將按照預期將所有數據返回到PHP。

嘗試清除循環中使用的所有數組,方法是在循環后調用unset函數以清除所有數組,例如

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

這將解決您的問題,因為它解決了我的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM