2

当我在 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 代码(我使用我创建的数据库类)

$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.";
    }
4

4 回答 4

1

mysql_num_rows() 更好的解决方案是根本不使用,而只是不断mysql_fetch_assoc()重复调用,直到它停止返回结果:

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

(Ps。您知道,您的代码使用的原始 PHP mysql API自 PHP 5.5.0 起已弃用,并将在未来的某个版本中删除。您确实应该使用受支持的 API 之一,要么是mysqliPDO。)

于 2013-01-03T17:57:54.983 回答
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 中。

于 2013-01-03T17:25:09.477 回答
0

尝试替换此行:

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

和:

 for ($i = 0; $i < mysql_num_rows($returned) + 1; $i++)
于 2013-01-03T17:12:39.567 回答
0

尝试通过在循环后调用 unset 函数来清除循环内使用的所有数组以清除所有数组,例如

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

这将解决您的问题,因为它解决了我的问题。

于 2016-03-03T05:13:11.537 回答