Visualizzazione dei risultati da 1 a 10 su 10

Discussione: PDO class

  1. #1

    PDO class

    Sto cercando di modificare tutte le parti di codice, in alcune pagine di un sito web, che utilizzano mysql_query() utilizzando la classe PDO di PHP. Purtroppo NON riesco a farlo, in particolare NON so come estrarre dati dalle tabelle del database. Impostando error_reporting = E_ALL visualizzo il seguente errore:
    Fatal error: Uncaught Error: Call to undefined method PDO::fetchAll()
    Per ovvi motivi sto provando lo script di estrazione con una tabella di esempio molto semplice in cui ho inserito giusto 3 record, la parte di codice errata (ammesso che sia un errore di codice) è come riporto di seguito
    Codice PHP:
    $result $dbh->fetchAll("SELECT * FROM my_menu");
    print_r($result); 
    In effetti ho provato diversi script simili ma nessuno di essi funziona.
    Qualsiasi indicazione NON può che essermi utile GRAZIE

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    11,843
    Potresti riportare anche il codice in cui istanzi l'oggetto PDO ed esegui la query?
    Dal codice riportato potrebbe essere che in $dbh non ci sia un result set generato da PDO.

  3. #3
    L'utente che si connette al DB è user_1 con tutti i privilegi GRANT ALL
    codice:
    $dsn = 'mysql:dbname=db_user_1; host=localhost;';
    $user = 'user_1';
    $password = '*****';
    $options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8');
    
    
    try {
        $dbh = new PDO($dsn, $user, $password, $options);
    } catch (PDOException $e) {
        echo 'Connessione Fallita: ' . $e->getMessage();
    }
    Successivamente ho provato anche ad usare l'utente root e visualizzare qualche record dalla tabelle mysql, usando il codice seguente ed ottenendo un altro tipo di errore. il codice è:

    codice:
    $host = "localhost";
    $db = "mysql";
    $user = "root";
    $password = "*****";
    
    
    try {
    
    
      $connessione = new PDO("mysql:host=$host;dbname=$db", $user, $password);
      $connessione->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
      
      foreach ($connessione->query("SELECT Db, User FROM mysql") as $row)
      {
          echo $row['Db'] ." - ". $row['User'] . "<br />";
      }
      $connessione = null;
    }
    catch(PDOException $e)
    {
      echo $e->getMessage();
    }

    In questo caso l'errore riportato dopo aver tentato di estrarre i record è il seguente:


    SQLSTATE[42S02]: Base table or view not found: 1146 Table 'mysql.mysql' doesn't exist

    Sto facendo delle ricerche ma ancora devo capire bene.

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    11,843
    Il tuo db si chiama mysql?

  5. #5

    Modifica di errore nome tabella

    Sulla prima connessione utente: user_1; DB: db_user_1; Errore riportato:
    Fatal error: Uncaught Error: Call to undefined method PDO::fetchAll()
    la seconda connessione invece utente: root; DB: mysql; Errore riportato:
    SQLSTATE[42S02]: Base table or view not found: 1146 Table 'mysql.mysql' doesn't exist
    Questa seconda connessione funziona bene l'errore era sul nome della tabella, la tabella reale è ( db ) invece erroneamente avevo scritto mysql. Questa seconda funziona bene la prima invece NO.
    Ultima modifica di rel_style; 22-12-2019 a 23:26 Motivo: Erroe di trascrizione codice

  6. #6
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    11,843
    Ripeto: dovresti riportare tutto il codice coinvolto, per esempio non hai mai riportato la parte in cui esegui la query per il primo caso.

    N.B. non riportare frammenti con cui poi dobbiamo ricostruire un puzzle, prendi il blocco di codice così come ce l'hai, copialo e incollalo.

  7. #7
    Questo di seguito è perfettamente funzionante

    Codice PHP:
    $host "localhost";
    $db "mysql";
    $user "root";
    $password "++++++";

    try {
        
    $connessione = new PDO("mysql:host=$host;dbname=$db"$user$password);
        
    $connessione->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION);

        foreach (
    $connessione->query("SELECT Host, Db, User FROM db") as $row)
        {
             echo 
    $row['Host'] ." - "$row['Db'] . " - "$row['User'] . "<br />";
        }
        
    $connessione null;
    }
        catch(
    PDOException $e){  echo $e->getMessage();

    Ultima modifica di rel_style; 24-12-2019 a 00:58

  8. #8
    Questo secondo invece NON funziona, ed è quasi identico

    Codice PHP:
    $host "localhost";
    $db "db_user_1";
    $user "user_1";
    $password "+++++++";


    try {
      
    $connessione = new PDO("mysql:host=$host;dbname=$db"$user$password);
      
    $connessione->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION);
      
      foreach (
    $connessione->query("SELECT ID_LABEL_MENU, VIRTUAL_FILENAME, LABEL_LINK FROM menu") as $row)
      {
          echo 
    $row['ID_LABEL_MENU'] ." - "$row['VIRTUAL_FILENAME'] . " - "$row['LABEL_LINK'] . "<br />";
      }
      
    $connessione null;
    }
    catch(
    PDOException $e)
    {
      echo 
    $e->getMessage();

    Errore riportato:

    SQLSTATE[42S02]: Base table or view not found: 1146 Table 'user_1.db' doesn't existSQLSTATE[HY000] [1044] Access denied for user 'user_1'@'localhost' to database 'db_user_1'
    Ultima modifica di rel_style; 24-12-2019 a 00:57

  9. #9
    AGGIORNAMENTO SULLA MANCATA ESTRAZIONE DI DATI DALLA TABELLA MYSQL UTILIZZANDO LA CLASSE PDO

    i codici riportati sopra funzionano, solo che c'è una particolarità:
    - se l'utente (ed il database) viene creato attraverso phpmyadmin, il codice NON va;
    - se invece user e DB vengono creati attraverso terminale (a riga di comando) il tutto funziona correttamente;

    Ovviamente quando apro il browser e mi collego a PHPMYADMIN user e DB creati a riga di comando, NON vengono visualizzati


  10. #10
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    11,843
    Hai capito cosa dice l'errore?
    Ci sono 2 problemi
    SQLSTATE[42S02]: Base table or view not found: 1146 Table 'user_1.db' doesn't exist
    come l'errore del secondo esempio che avevi riportato sopra poi risolto
    SQLSTATE[HY000] [1044] Access denied for user 'user_1'@'localhost' to database 'db_user_1'
    Verifica quindi cosa hai scritto per il nome del DB, username, password e tabella assicurandoti anche di aver rispettato in ognuna di queste le lettere maiuscole e minuscole, perché ti sta dicendo che fallisce proprio la connessione.

Tag per questa discussione

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