Cannot use object of type DB_Error as array

/*selezione di tutti gli utenti*/
    $sql = "SELECT * FROM \"autorizzazioniUtenti\" ORDER BY \"numero\"";
    $utenti = $db->getAll($sql);
    $n = count($utenti);

    for($i=0; $i<$n; $i++)
    {   //associzione tutti i nomi testuali dei proprietari delle varie licenze
        $sql = "SELECT COGNOME FROM NOTIFICHE WHERE ID = " . $utente[$i]['proprietario'];
        $qsogid = $dbms->getAll($sql);
        $utente[$i]['proprietario']=$qsogid[0]['COGNOME'];
    }

mi da questo errore:

Fatal error: Cannot use object of type DB_Error as array in ..... on line 69

Praticamente l'aplicazione in php4 usava il risultato della prima query come un array, ma in PHP5 questo non sembra permesso.

Qualcuno ha qualche suggeriemnto da darmi su come risolvere la cosa?

inviato 8 anni fa
ilbonzo
X 0 X

perch tu usi una classe per

leggere il db ed un oggetto in php5 si visualizza

con $nome->propriet

non so se la classi che usi l'ezsql..

io la trovo fantastica ma dovresti cambiarla cosi.. :

/*selezione di tutti gli utenti*/
    $sql = "SELECT * FROM \"autorizzazioniUtenti\" ORDER BY \"numero\"";
    $utenti = $db->getAll($sql);
    
    foreach ($utenti as $value)
    {   //associzione tutti i nomi testuali dei proprietari delle varie licenze
        $sql = "SELECT COGNOME FROM NOTIFICHE WHERE ID = " . $value->proprietario;
        $qsogid = $dbms->getAll($sql);
        $value->proprietario=$qsogid[0]['COGNOME'];
    }

non sono sicuro del secondo getall dato che un valore non hai una funzione tipo getvar???

e a quel punto anche $qsogid[0]['COGNOME'] si trasforma in $qsogid->cognome

risposto 8 anni fa
arkant
X 0 X

L'applicazione usa pear DB, non ezsql.

con il tuo codice,

$value->proprietario=$qsogid[0]['COGNOME']; da lo stesso errore.

se metto

$value->proprietario=$qsogid->COGNOME;

l'errore :

Notice: Trying to get property of non-object

Undefined property: DB_Error::COGNOME

Per ora posso creare io l'array multidimensionale e popolarlo, ma vorrei trovare una soluzione migliore.

tra l'altro ho capito che pear DB defunta...

risposto 8 anni fa
ilbonzo
modificato 8 anni fa
X 0 X

ezsql non supporta mssql?!?!

risposto 8 anni fa
ilbonzo
X 0 X

ovvio che si...

http://www.woyano.com/view/213/Download-ezSQL-Database-Class-204

molto facile da usare, ma se hai bisogno chiama pure...

risposto 8 anni fa
arkant
X 0 X
<?php
require ('ezsql/ez_sql_core.php');
require ('ezsql/ez_sql_mysql.php');
require ('ezsql/ez_sql_mssql.php');
echo "<h3>ezSql</h3>";

// at the same time - db_user / db_password / db_name / db_host
$db = new ezSQL_mysql('****************');
$dbms = new ezSQL_mssql('******************');


$spuntisti = $db->get_results("SELECT * FROM autorizzazioniUtentii ORDER BY numero");

foreach ( $utenti as $user )
{
      // Access data using object syntax
      echo $user->idUtente.'<br/>';
      echo $user->proprietario.'<br/>';
}

echo "********************* seconda query *********************************";

        $sql = "SELECT COGNOME FROM NOTIFICHE";
        $qsogid = $dbms->get_results($sql);
        foreach ( $qsogid as $user )
        {
            // Access data using object syntax
            echo $user->SOG_COGNOME.'<br/>';
         }

    //}

?>

La seconda query non mi stampa nulla e non mi da nessun errore....

I file che mi servono di ezsql li ho messi tutti in una cartella ezsql, qual' il metodo corretto per includere questa libreria?

risposto 8 anni fa
ilbonzo
X 0 X

dopo ogni chiamata puoi debuggare in maniera veloce richiamanto il metodo debug...

prova a fare:

echo "********************* seconda query *********************************";

        $sql = "SELECT COGNOME FROM NOTIFICHE";
        $qsogid = $dbms->get_results($sql);
        $dbms->debug();

a video dovrebbe apparire tutta la query svolta e i risultati...

e poi che versione hai scaricato di ezsql?

risposto 8 anni fa
arkant
X 0 X
$sql = "SELECT COGNOME FROM NOTIFICHE";
        $qsogid = $dbms->get_results($sql);
        $dbms->debug();

a video purtroppo non mi da niente.

I dati di connessione sono giusti, se li sbaglio mi da errore, se metto quelli giusti niente....

P.S.Sulla query Mysql invece mi da il debug, molto bella questa classe.

La versione ezsql : 213-ez_sql_2.04.zip

risposto 8 anni fa
ilbonzo
modificato 8 anni fa
X 0 X

senti a me ha sempre funzionato sia in mysql che in mssql..

l'unica cosa che mi viene in mente che non l'ho mai usata mista...

prova a commentare la parte del mysql e guarda se funziona..

non mi viene in mente altro... vorrei provare sul mio web server

ma al momento non ho mssql...

risposto 8 anni fa
arkant
X 0 X

Esattamente...

Se faccio solo la query a mssql funziona.... mista no. :tichedoff: :tichedoff: :tichedoff:

Ma a me serve mista?!??! :'(

risposto 8 anni fa
ilbonzo
X 0 X
/*selezione di tutti gli utenti*/
    $sql = "SELECT * FROM \"autorizzazioniUtenti\" ORDER BY \"numero\"";
    $utenti = $db->getAll($sql);
    $n = count($utenti);

    for($i=0; $i<$n; $i++)
    {   //associzione tutti i nomi testuali dei proprietari delle varie licenze
        $sql = "SELECT COGNOME FROM NOTIFICHE WHERE ID = " . $utente[$i]['proprietario'];
        $qsogid = $dbms->getAll($sql);
        $utente[$i]['proprietario']=$qsogid[0]['COGNOME'];
    }

mi da questo errore:

Fatal error: Cannot use object of type DB_Error as array in ..... on line 69

Praticamente l'aplicazione in php4 usava il risultato della prima query come un array, ma in PHP5 questo non sembra permesso.

Qualcuno ha qualche suggeriemnto da darmi su come risolvere la cosa?

Forse c' un errore:

$utenti = $db->getAll($sql);

...

$utente[$i]['proprietario'];

Chi $utente? Forse volevi scrivere $utenti?

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

Grazie, ma purtroppo l'errore solo su post nel forum, non sul codice.... :(

risposto 8 anni fa
ilbonzo
X 0 X

Ecco la chiave di tutto:

Fatal error: Cannot use object of type DB_Error as array in

La query non corretta e ha causato un errore quindi $db->getAll() invece di restituire un array di risultati ha restituito un oggetto di errore DB_Error.

Prima di leggere i risultati dovresti fare un controllo:

$utenti = $db->getAll($sql);
if (PEAR::isError($utenti)) {
  die($utenti->getMessage());
}

:bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

Fatal error: Cannot use object of type DB_result as array in *** on line 37

Il problema che anche se la query giusta mi da problemi.

Comunque ora si tratta di decider ecosa usare per sostituire pear DB che non pi supportata, ma tutte le prove fatte mi danno problemi a connettermi a mssql.

Devo riuscire ad installare i driver per mssql su linux.

solo con PDO per ora non riesco

Errore di connessione: could not find driver

Stesso errore sia su Debian che su CentOS

Con zend_db

MsSQL

Fatal error: Uncaught exception 'Zend_Db_Adapter_Exception' with message 'The mssql driver is not currently installed' in /usr/share/pear/Zend/Db/Adapter/Pdo/Abstract.php:103 Stack trace: #0 /usr/share/pear/Zend/Db/Adapter/Pdo/Mssql.php(135): Zend_Db_Adapter_Pdo_Abstract->_connect() #1 /usr/share/pear/Zend/Db/Adapter/Abstract.php(270): Zend_Db_Adapter_Pdo_Mssql->_connect() #2 /var/www/html/zend_db_prova/zend_mssql.php(30): Zend_Db_Adapter_Abstract->getConnection() #3 {main} thrown in /usr/share/pear/Zend/Db/Adapter/Pdo/Abstract.php on line 103

Sia su Debian che su CentOS

MDB2 su debian non ci va perch non ho

Su c' il pacchetto, lo provo..

risposto 8 anni fa
ilbonzo
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda