Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [Query PDO] errore PDOStatement::execute()

    Non so come scrivere bene questa query:

    Codice PHP:
    // ids_schede_testa e' un vettore con i valori che devo inserire nell' IN operator alla query sotto
    $in str_repeat("?,"count($ids_schede_testa) - 1) . "?";

    $sub_sql 
          
    "SELECT Sum(nol) AS SommaNbl
          FROM Schede_corpo
          WHERE fk_schede_testa IN (
    $in
          GROUP BY Schede_corpo.fk_esercizio, fk_schede_testa 
          HAVING Schede_corpo.fk_esercizio = :id_esercizio;
                    
        
    $sub_result = $connessione->prepare($sub_sql);
        
    $sub_result->bindParam(":id_esercizio", $id_esercizio, PDO::PARAM_INT);
        
    $sub_result->execute($ids_schede_testa);
        
    $sub_row = $sub_result->fetch(PDO::FETCH_ASSOC); 
    L'errore che mi restituisce e':
    PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: mixed named and positional parameters in etc...

    Capisco che non posso mixare i valori passando contemporaneamente i parametri tramite posizione nell IN operator e tramite bindparam.
    Come posso riscrivere la query?
    Grazie.

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Stampa la query con un echo, vedrai una sfilza di ? (che sono i parametri posizionali secondo PDO) e inoltre usi un parametro nominale, ovvero :id_esercizio, e ti sta dicendo che non puoi mischiare i 2 tipi di parametri in una query, o usi tutti parametri posizionali, o tutti nominali.
    Ultima modifica di Alhazred; 03-12-2020 a 15:09

  3. #3
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Per risolvere potresti far diventare posizionale anche l'ultimo parametro, quindi sostituire :id_esercizio con ? ed aggiungere $id_esercizio come ultimo elemento dell'array $ids_schede_testa. L'aggiunta andrebbe fatta dopo l'assegnazione di $in per non inficiare il funzionamento corretto di str_replace().

  4. #4
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Per risolvere potresti far diventare posizionale anche l'ultimo parametro, quindi sostituire :id_esercizio con ? ed aggiungere $id_esercizio come ultimo elemento dell'array $ids_schede_testa. L'aggiunta andrebbe fatta dopo l'assegnazione di $in per non inficiare il funzionamento corretto di str_replace().
    Grazie per la sistemazione, funziona

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.