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

    PDO execute() non funziona

    Lavoro con in locale con XAMPP e php 7.
    tramite PDO non riesco ad eseguire le query.
    Codice PHP:
    ...
    <?php
     $host
    'localhost'$db 'prova'$user 'root'$password '';
     try{
      
    $connessione = new PDO('mysql:host='.$host.';dbname='.$db$user$password,
                             array(
    PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8") );
      }
     catch(
    PDOException $e)
     { echo 
    $e->getMessage();} 
     try {
      
    $sql $connessione->prepare('SELECT * FROM tblutenti');
      
    $sql->execute(); // esecuzione del prepared statement
      
    var_dump($sql->rowCount());
      if(
    $sql->rowCount() > 0){ // conteggio dei record coinvolti dalla query
      
    $result $sql->fetchAll();
      }
      
    $db null// chiusura della connessione
      
    }
      catch(
    PDOException $e)
      { echo 
    $e->getMessage(); }
    ?>
     <table>
      <tr><th>Cognome</th></tr>
    <?php
     
    foreach($result as $cn){
       echo 
    '<tr><td>'.$cn[COGNOME'].'</td></tr>';
     }
    ?>
      </table>
    ...

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Nello specifico cosa ti succede?

    Calcola che hai un problema di apici, salta agli occhi già guardando la colorazione del codice

    $cn['COGNOME']

  3. #3
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Nello specifico cosa ti succede?

    Calcola che hai un problema di apici, salta agli occhi già guardando la colorazione del codice

    $cn['COGNOME']
    Un errore nel copiare il codice.

    In un altro computer e sempre con xampp lo script funziona bene.

    Non mi spiego???

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    No, non ti spieghi, devi dire cosa succede "Non funziona" e basta non vuol dire niente, rileggi il regolamento della sezione.

    Hai errori? Cosa dicono? Qualcuno degli echo che hai viene eseguito? Quale?
    Almeno si capisce cosa viene eseguito.
    Ultima modifica di Alhazred; 09-02-2018 a 14:16

  5. #5
    Ecco gli errori che ricevo
    Notice
    : Undefined variable: result in
    .....
    Warning
    : Invalid argument supplied for foreach()

    Pare non eseguire $result = $sql->fetchAll();

  6. #6
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Ecco, vedi che riportando gli errori si capisce di più?

    Il var_dump() non stampa niente?

    Pare non eseguire $result = $sql->fetchAll();
    Non proprio, pare che
    $sql->rowCount() sia 0, quindi non entri nell'if che dovrebbe inizializzare $result e di conseguenza dopo risulta non definita.
    Ci sono record nella tabella? Non è che l'hai resettata e non ti ricordi? Verifica.

  7. #7
    La tabella ha più di 20 record.

    Ecco la stampa dei var_dump:

    var_dump($sql->execute()); bool(false)
    var_dump($sql->rowCount()); int(0)
    var_dump($sql->fetchAll()); array(0) { }


  8. #8
    Eliminando il trattino dal nome della tabella ha funzionato.

    Perché?

  9. #9
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    var_dump($sql->execute()); bool(false)
    var_dump($sql->rowCount()); int(0)

    Quindi esattamente ciò che ti ho detto, rowCount() restituisce 0, dunque non entri nell'if che dovrebbe inizializzare $result

    Ora che hai anche messo il risultato del var_dump() sull'execute si capisce anche che la query non va a buon fine, infatti restituisce false, per qualche motivo fallisce.
    Motivo? Senza vedere altro non saprei, per esempio un errore di battitura sul nome della tabella o altro, cosa che non mi sorprenderebbe, ad un certo punto scrivi

    $db = null; // chiusura della connessione

    mentre la tua connessione si chiama $connessione e non $db.

    Ricontrollati tutti i dati di connessione, i dati delle query ed i nomi delle variabili.

  10. #10
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Quote Originariamente inviata da lucavalentino Visualizza il messaggio
    Eliminando il trattino dal nome della tabella ha funzionato.

    Perché?
    Come volevasi dimostrare, qui sul forum hai scritto una cosa e sul tuo codice ne hai un'altra
    $sql = $connessione->prepare('SELECT * FROM tblutenti');
    come vedi il nome della tabella che hai riportato qui il trattino non ce l'ha, verificalo sul DB.

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.