Visualizzazione dei risultati da 1 a 4 su 4

Discussione: query PDO annidata

  1. #1
    Utente di HTML.it L'avatar di ttcc
    Registrato dal
    Dec 2008
    Messaggi
    486

    query PDO annidata

    Buongiorno a tutti,
    ho un problema con delle query.
    Cerco di costruire una query con all'interno di while() un'altra query. Non l'ho mai provato e ho pensato che potesse funzionare, ma invece tutto il costrutto si ferma alla prima riga della prima query e della seconda query annidata. ho provato a scrivere il codice il più semplice possibile , ma niente! Mi spiego con un esempio:
    Codice PHP:
    #prima query
    try
        {
            
    $sql="SELECT col1, col2, col3 
            FROM tabella1
            where col4=:num
            order by col3"
    ;
            
    $s=$pdo->prepare($sql);
            
    $s->bindValue(':num'numero );
            
    $s->execute();        
        }catch(
    PDOException $e)
                {
                
    $header="oooops.... ";
                
    $msg  ="query errata per cercare i dati... : " $e->getMessage() ." in file: ".$e->getFile() ." in line: "$e->getLine();
            include 
    'errore.html.php';
                exit();
                }
        
    $i=0;        
        while(
    $rows=$s->fetch())
        {
        
        
    $tabella2[]=$rows['col3']; //tale valore è il nome di diverse tabelle dalle quali vorrei prendere dei dati;
        
    $array1[]=array('val1'=>$rows['col1'],'val2'=>$rows['col2'],'val3'=>$rows['col3']);


        
    #query nested
            
    try
                {
                
    $sql="select col5, col6, col7, col8, col9  
                from "
    $tabella2[$i] . 
                inner join tabella3 on "
    .$tabella2[$i].".id=tabella3.id
                        
                where "
    .$tabella2[$i]. ".col10=:idN";
                    
    $s=$pdo->prepare($sql);
                    
    $s->bindValue(':idN',numero );
                    
    $s->execute();
                
                }catch(
    PDOException $e)
                    {
                        
    $header="oooops.... ";
                        
    $msg  ="query errata per cercare i dati nel nido... : " $e->getMessage() ." in file: ".$e->getFile() ." in line: "$e->getLine();
                        include 
    'errore.html.php';
                        exit();
                    }
                        
                    while(
    $row=$s->fetch())
                            {
                                
    $array2[$i][]=array('val4'=>$row['col5'], 'val4'=>$row['col6'], 'val6'=>$row['col7'],'val7'=>$row['col8'],'val8'=>$row['col9']);
                            }
        
    $i++;
        } 
    non riesco a capire perchè. che ne pensate?

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    189
    Codice PHP:
    <?php
    $i 
    0;
    $tabella2 = array(array());
    $i++; // POST increment
    while(true) {
    $tabella2[$i] = 'valore';
    }
    ?>
    Inizializzo e imposto la variabile $tabella2 fuori dal loop, dentro al loop while imposto il valore, $i++ è incremento dopo la prima utilizzazione e quindi dentro il while $i è il valore precedentemente.
    Quindi anche con ulteriori loop annidati $tabella2 contiene tutti i record, $i tutti gli indici dell'array $tabella2
    Ultima modifica di darbula; 19-10-2023 a 13:38

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    189
    Codice PHP:
    <?php
    $y 
    0;
    $i 0;
    $tabella2 = array(array());
    while(
    $y 1) {
    while(
    10 $i) {
    $tabella2[$i] = 'valore'.$i;
    var_dump($i$tabella2[$i]);
    $i++; // POST increment
    }
    $y++; // Arriva solo fino a 1
    }
    ?>
    Expected result:
    codice:
    int(0)
    string(7) "valore0"
    int(1)
    string(7) "valore1"
    int(2)
    string(7) "valore2"
    int(3)
    string(7) "valore3"
    int(4)
    string(7) "valore4"
    int(5)
    string(7) "valore5"
    int(6)
    string(7) "valore6"
    int(7)
    string(7) "valore7"
    int(8)
    string(7) "valore8"
    int(9)
    string(7) "valore9"
    Altrimenti se tabella2 è impostata al primo while genera Warning (con l'output su STDERR o STDOUT e error_reporting (-1)) dopo il valore successivo a 0 di $i.
    Ultima modifica di darbula; 19-10-2023 a 22:14

  4. #4
    Utente di HTML.it L'avatar di ttcc
    Registrato dal
    Dec 2008
    Messaggi
    486
    Quote Originariamente inviata da darbula Visualizza il messaggio
    Codice PHP:
    <?php
    $y 
    0;
    $i 0;
    $tabella2 = array(array());
    while(
    $y 1) {
    while(
    10 $i) {
    $tabella2[$i] = 'valore'.$i;
    var_dump($i$tabella2[$i]);
    $i++; // POST increment
    }
    $y++; // Arriva solo fino a 1
    }
    ?>
    Expected result:
    codice:
    int(0)
    string(7) "valore0"
    int(1)
    string(7) "valore1"
    int(2)
    string(7) "valore2"
    int(3)
    string(7) "valore3"
    int(4)
    string(7) "valore4"
    int(5)
    string(7) "valore5"
    int(6)
    string(7) "valore6"
    int(7)
    string(7) "valore7"
    int(8)
    string(7) "valore8"
    int(9)
    string(7) "valore9"
    Altrimenti se tabella2 è impostata al primo while genera Warning (con l'output su STDERR o STDOUT e error_reporting (-1)) dopo il valore successivo a 0 di $i.
    Scusa il ritardo, ma ero fuori. Non ho capito quanto scrivi. In particolare la posizione delle variabili a zero e dei due while, la prima dovrebbe sviluppare la prima query e cosi via, giusto?. O tutto il codice che scrivi va inserito nella seconda query all'interno del primo loop?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.