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コードです(私が作成した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.";
    }
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のいずれかに移動する必要がありますまたはPDO。)

于 2013-01-03T17:57:54.983 に答える
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

$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

ループの後に unset 関数を呼び出して、ループ内で使用されているすべての配列をクリアして、次のようにすべての配列をクリアしてみてください

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

これは私の問題を解決したので、あなたの問題を解決します。

于 2016-03-03T05:13:11.537 に答える