Visualizzazione risultati 1 fino 6 di 6

Discussione: Problemi PDO

  1. #1
    Guest

    Predefinito Problemi PDO

    Un saluto a tutti,
    dopo aver creato un sito che si avvale dell'uso del PDO, mi sono accorta che sebbene mi permetta di istanziare la variabile di titpo PDO, poi ogni volta che ne uso le proprietà mi dice che la variabile istanziata non è unoggetto..

    Premesso che il sito in locale sul mio pc funziona a meraviglia.. mi domando se ho sbagliato qualcosa o semplicemente se altervista non supporta il PDO..

    Vi posto qualche frammento di codice.. quello che occorre per fare login:
    Codice PHP:
    protected $dbh;
    public function
    __construct($hostDbName, $user, $password){
    try {
    $this->dbh = new PDO($hostDbName, $user, $password);
    }
    catch (
    PDOException $e) {
    echo
    $e->getMessage();
    }
    }
    public function
    getUtente($email, $password){
    $sql = "SELECT * FROM utenti WHERE email = '$email' AND password = '$password'";
    $ret=$this->dbh->query($sql);
    if (
    $ret){
    $this->utente = $ret->fetch(pdo::FETCH_OBJ);
    return
    $this->utente;
    }
    else {
    return
    0;
    }
    }
    Se provo ad effettuare il login con credenziali valide mi viene ritornata questa scritta:
    Fatal error: Call to a member function query() on a non-object in /membri/../lib/mydb.class.php on line 71
    la riga 71 è il frammento di codice che esegue la query: $ret=$this->dbh->query($sql);
    Qualcuno può aiutarmi?

  2. #2
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    Assicurati di avere, attivata sul tuo spazio, una versione di php5 più vicina a quella che hai provato in locale, vedi Supporto PHP.

  3. #3
    Guest

    Predefinito

    Citazione Originalmente inviato da dreadnaut Visualizza messaggio
    Assicurati di avere, attivata sul tuo spazio, una versione di php5 più vicina a quella che hai provato in locale, vedi Supporto PHP.
    Facendo un phpinfo del server locale risulta quanto segue:
    Apache Version Apache/2.4.3 (Win32) OpenSSL/1.0.1c PHP/5.4.7

    Il progetto creato con neatbeans è settato per usare il PHP 5.3

    Sul server altervista ho scelto come opzione fin dall'inizio di usare la versione di PHP 5.3, non essendo presente la 5.4.

    Potrebbe essere questo il problema?

  4. #4
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    5.3 dovrebbe andare bene, e PDO di solito non da problemi.

    Prova ad aggiungere questo dopo la connessione al database, per assicurarti che eventuali eccezioni vengano lanciate correttamente:
    Codice PHP:
    $this->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    Inoltre aggiungere in cima allo script
    Codice PHP:
    error_reporting(E_ALL);
    non fa mai male.

  5. #5
    Guest

    Predefinito

    Ho seguito i tuoi consigli.. ora quando provo a fare login mi riporta il seguente messaggio:

    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected' in
    /membri/eventiadida/lib/mydb.class.php:78

    Stack trace:

    #0 /membri/eventiadida/lib/mydb.class.php(78):
    PDO->query('SELECT * FROM u...')

    #1 /membri/eventiadida/lib/session.class.php(31): myDb->getUtente('emailprova@gmail....', 'prova')

    #2 /membri/eventiadida/lib/getlogin.php(4): mySession->eseguiLogin('emailprova@gmail....', 'prova')

    #3 /membri/eventiadida/index.php(21): include_once('/membri/eventia...')

    #4 /membri/eventiadida/index.php(42): inclusioni('getlogin.php')

    #5 {main} thrown in /membri/eventiadida/lib/mydb.class.php on line 78


    Riporto per sicurezza le credenziali di accesso che ho inserito e che mi ha fornito altervista e il codice che sta nel metodo __construct della classe:

    Codice PHP:
    $hostDbName="mysql:localhost;dbname=my_eventiadida";
    $user='eventiadida';
    $password='';
    $this->dbh = new PDO($hostDbName, $user, $password);
    $this->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    Mi viene infatti da pensare a questo punto che le credenziali siano errate..

    -

    Giusto per precisare ti riporto anche il codice che sta alla linea78 che ha generato l'errore e quello che lo precede:

    Codice PHP:
    public function getUtente($email, $password){
    $sql = "SELECT * FROM utenti WHERE email = '$email' AND password = '$password'";
    $ret=$this->dbh->query($sql);
    ... la linea 78 è $ret=$this->dbh->query($sql);
    Ultima modifica di darkwolf : 15-11-2012 alle ore 17.09.07 Motivo: Unione doppio post!

  6. #6
    Guest

    Predefinito

    Finalmente ho risolto..
    posto qui la soluzione nel caso mai dovesse capitare ad altri lo stesso poblema..

    in pratica dopo la stringa di connessione è necessario aggiungere questo frammento di codice:

    Codice PHP:
    $this->dbh->exec('USE nomedatabase;');
    //nel mio caso è my_eventiadida

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •