Visualizzazione dei risultati da 1 a 10 su 10

Visualizzazione discussione

  1. #5

    Controllato

    Ho controllato il manuale del PDO per quanto attiene le eccezioni.
    Da quanto leggo ho due possibilita' : settare il gestore o usare quello previsto di defaul (SILENT).

    Con SILENT il comando errato ( mi riferisco a PREPARE) torna FALSE, con il gestore settato torna una eccezione gestibile da TRY / CATCH.

    Bene nell'esempio che segue il gestore e' abilitato, ma non torna alcuna eccezione

    Codice PHP:

        
    try {       
           
    $db = new PDO("mysql:host=localhost;dbname=sac;charset=utf8"DB_USER  DB_PW); }        catch (PDOException $EXCEPTIONS
             {        
    handle_error $EXCEPTIONS->getMessage()); }    
        try {        
    $db->setAttribute (PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING); } 
        catch (
    PDOException $EXCEPTIONS) { handle_error $EXCEPTIONS->getMessage()); }                   $email="roma@libero.it"
        try {    
    $stmt$db->prepare("Select * anagrafe  anaEmai=:anaEmai");  }  
        catch (
    PDOException $EXCEPTIONS) {handle_error $EXCEPTIONS->getMessage()); }    
        try { 
    $stmt->bindvalue(':anaEmai'$emailPDO::PARAM_STR); }
        catch (
    PDOException $EXCEPTIONS
        {        
    handle_error $EXCEPTIONS->getMessage()); }
        try {        
    $stmt->execute();  }  
        catch (
    PDOException $EXCEPTIONS) { handle_error $EXCEPTIONS->getMessage());     }    $righe=$stmt->rowCount();    echo "righe " $righe;unset($db); 

    Nel caso del codice del post la stringa SQL "Select * anagrafe WHERE anaEmai=:anaEmai"
    e' sicuramente sbagliata.
    Eppure nessuna eccezione viene generata.

    Idem per il comando di BIND, ma questo puo' anche essere normale, assolutamente meno normale
    per l'execute che anch'essa non torna eccezioni.

    L'unico segnale che qualcosa non ha funzionato e' il valore numrow = 0 perche' io so che
    per forza deve essere 1.

    Mi sembra assai poco rassicurante.

    Poiche' il manuale afferma che se il gestore degli errori e' settato su SILENT non viene generata alcuna eccezione ma il comando PREPARE torna FLASE ho provato anche questo :


    Codice PHP:
        try { $db = new PDO("mysql:host=localhost;dbname=sacradomus;charset=utf8"DB_USER                DB_PW); }  
      catch (
    PDOException $EXCEPTIONS) {        handle_error $EXCEPTIONS->getMessage());  }   $email="roma@libero.it";   
      
    $stmt$db->prepare("Select * anagrafe WHERE anaEmai=:anaEmai");  
       if (!
    $stmt)    
            { echo 
    "Errore ";       
            }      
       else   
            { echo 
    "corretto ";      
         }
         
    $stmt->bindvalue(':anaEmai'$emailPDO::PARAM_STR);   
         
    $stmt->execute();    $righe=$stmt->rowCount();     
        echo 
    "righe " $righe;    unset($db); 
    Tutto uguale arriva alla fine, stampando "corretto" e righe 0.

    Posso rileggere ancora il manuale ma non credo possa essermi utile.
    Osservo inoltre, ho scritto (copiato) 4 comandi :

    OPEN
    STRINGA CON PARAMETRI
    ASSEGNAZIONE DEI PARAMETRI
    ESECUZIONE DELLA QUERY

    ogni comando e' stato inserito in TRY/CATCH e nonostante questo arrivo alla
    fine dello script.
    DI CERTO SBAGLIO IO, pero' mi pare tutto assai bizzarro, concludo dicendo che il gestore degli errori PHP e' settato al massimo error_reporting(E_ALL);.

    Grazie
    Ultima modifica di curzio.maria; 20-05-2017 a 16:28

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 © 2025 vBulletin Solutions, Inc. All rights reserved.