2013-04-03 1 views
0

J'ai créé une requête qui parcourt un groupe d'ID de table pour obtenir la somme de leurs valeurs combinées. avec la gestion des erreurs je reçois une erreur "Table 'asterisk.custom_' n'existe pas" et la requête est tuée de toute évidence. mais si je supprime la gestion des erreurs, j'obtiens un "mysql_fetch_array() attend que le paramètre 1 soit une ressource" et la requête se termine comme il se doit. Merci d'avance pour votre aide.La table n'existe pas

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

} 

Mise à jour: Le tableau existe dans la base de données: custom_2346579543413 custom_5466546513564 ils sont créés par le logiciel de numérotation et im les appelant d'une autre requête qui me fournit la partie numérique du nom de table pour cette boucles d'interrogation à travers les valeurs dans le tableau customID pour faire la requête, Merci encore

Mise à jour: Sammitch, merci pour la suggestion, mais ils n'ont pas fonctionné.

Solution:

Merci Marc, vous avez confirmé un soupçon que j'avais en ce qu'elle a été correctement mise en boucle, mais pour une raison quelconque, il a été plusieurs fois mise en boucle que là nous clés. donc je me suis fait écho $ i pour confirmer et en fait il était en sortie 0,1,2,3 et depuis je sais qu'il n'y a que 3 clés le dernier n'a rien retourné et donc la gestion des erreurs attrapé et tué toute la boucle et pourquoi il est apparu correct lorsque la gestion des erreurs a été désactivée. La solution est en fait assez simple et il était dans la chaîne d'évaluation alors que la boucle j'avais utilisé

while($i<=$numrows) 

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

Créer le tableau? –

+1

S'il vous plaît ne pas utiliser mysql_: http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php – DessDess

+1

Suppression de la gestion des erreurs est comme un médecin ER dire à un patient "ignorer que trou de balle dans votre cœur, allez courir ce marathon de 50 milles ". –

Répondre

4

et la requête complète comme il se doit.

Non, ce n'est pas le cas. "mysql_fetch_array() s'attend à ce que le paramètre 1 soit une ressource" signifie "que la requête a échoué, et vous n'avez pas pris la peine de vérifier avant d'appeler mysql_fetch_array()".

Votre problème est que l'expansion de variable à l'intérieur d'une chaîne n'aime pas les index de tableau. Vous devez changer:

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

Pour:

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

Ou:

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

Pour que cela fonctionne correctement.

+1

naw. l'extension de tableau avec des touches variables fonctionne correctement pour les tableaux de dimension UNIQUE. pour multidimensionnel, alors vous avez besoin de la notation '{}'. par exemple. 'echo" $ arr [1] [2] "' produira 'Array [2]', mais 'echo" {$ arr [1] [2]} "' affichera la valeur attendue du tableau. Le problème est que l'OP accède probablement aux clés de tableau qui n'existent pas, donc PHP crache simplement une chaîne vide, ne laissant que «custom_.whatever» comme nom de table/champ. –