0

テーブル ID のグループをループしてそれらの組み合わせ値の合計を取得するクエリを作成しました。エラー処理を使用すると、「テーブル 'asterisk.custom_' が存在しません」というエラーが表示され、クエリは明らかに強制終了されます。しかし、エラー処理を削除すると、「mysql_fetch_array() はパラメーター 1 がリソースであることを期待しています」というメッセージが表示され、クエリは正常に完了します。よろしくお願いします。

    include("currentday.php");
    //---used for testing passing variables
    //echo $customID[0];
    //echo "<br>".$numrows;

    $i = 0;
     while($i<=$numrows)
{

mysql_select_db("asterisk") or die(mysql_error()); //This line determines the database to use
    $query = "SELECT  
            vicidial_users.user,
            vicidial_users.full_name,
            sum(vicidial_agent_log.pause_sec) as sumPause,
            sum(custom_$customID[$i].d_amt) as sumDamnt,
            sum(custom_$customID[$i].up_amt) as sumUpamnt,
            sum(custom_$customID[$i].md_amt) as sumMdamnt,
            sum(custom_$customID[$i].s_amount) as sumSamnt,
            sum(vicidial_agent_log.dispo_sec)
        FROM
            vicidial_agent_log
        INNER JOIN
            vicidial_users
        ON
            (vicidial_agent_log.user = vicidial_users.user)
        INNER JOIN
            custom_$customID[$i]
        ON
            (vicidial_agent_log.lead_id = custom_$customID[$i].lead_id)
        WHERE
            vicidial_users.user = 'tcx'
        GROUP BY
            vicidial_users.full_name
        ORDER BY
            vicidial_agent_log.event_time DESC
        ";              

    $queryResult = mysql_query($query);// or die(mysql_error());    


    while ($rowResult = mysql_fetch_array($queryResult)) 
                {

             $pauseResult[] = $rowResult["sumPause"];
             $sumdamntResult[] = $rowResult["sumDamnt"];
             $sumupamntResult[] = $rowResult["sumUpamnt"];
             $summdamntResult[] = $rowResult["sumMdamnt"];
             $sumsamntResult[] = $rowResult["sumSamnt"];

                }
                //print_r($pauseResult);
                //echo $pauseResult[0];


    $i++;       

}

更新: テーブルはデータベースに存在します: custom_2346579543413 custom_5466546513564 これらはダイヤラー ソフトウェアによって作成され、テーブル名の数値部分を提供する別のクエリからそれらを呼び出すので、このクエリは customID 配列の値をループしてクエリを作成します。再度、感謝します

更新: Sammitch さん、提案していただきありがとうございますが、うまくいきませんでした。

解決:

ありがとう、マーク、あなたはそれが正しくループしていたという疑いを確認しましたが、何らかの理由で、キーを押した回数よりも多くループしていました。だから私は $i をエコーし​​て確認しましたが、実際には 0,1,2,3 を出力していました.3つのキーしかないことがわかっているので、最後のキーは何も返さなかったので、エラー処理がそれをキャッチしてループ全体を強制終了しましたまた、エラー処理がオフになっているときに正しく表示された理由。解決策は実際にはかなり単純で、私が使用したwhileループ評価文字列にありました

    while($i<=$numrows) 

    while($i<$numrows)//this worked, the equals part of that gave it an extra loop
4

1 に答える 1

4

クエリは正常に完了します。

いいえ、そうではありません。「mysql_fetch_array() はパラメーター 1 がリソースであると想定しています」は、「クエリが失敗し、mysql_fetch_array() を呼び出す前に確認しなかった」ことを意味します。

あなたの問題は、文字列内の変数展開が配列インデックスを好まないことです。変更する必要があります:

"sum(custom_$customID[$i].d_amt) as sumDamnt,"

に:

"sum(custom_{$customID[$i]}.d_amt) as sumDamnt,"

または:

"sum(custom_" . $customID[$i] . ".d_amt) as sumDamnt,"

それが正しく機能するために。

于 2013-04-03T15:35:03.070 に答える