2012-07-01 17 views
13

Sto ottenendo il seguente messaggio di errore in CodeIgniter 2.1:Errore di aggiornamento Campo di database CodeIgniter

A PHP Error was encountered 

Severity: Notice 

Message: Array to string conversion 

Filename: database/DB_active_rec.php 

Line Number: 1407 

sto cercando di aggiornare i campi nel mio database. Ho questo codice e tutti i tutorial sono uguali per il caricamento in gruppo. Funziona comunque, ma la cosa è che mostra un tale errore.

questo quello che ho in mio modello:

function update2($data){ 
    $this->db->update_batch('users',$data, "id"); 
} 

Questo quello che ho in mio controller:

public function updateValues(){ 
    $this->load->model('get_db'); 
    $newRow = array(
     array(
      'id' => '3', 
      'firstname' => 'Rapphie' 
     ), 
     array(
      'id' => '2', 
      'firstname' => 'Charmie' 
     ) 
    ); 
    $this->get_db->update2($newRow); 
    echo "it has been updated"; 
} 
+0

Quale versione di CodeIgniter è in esecuzione? Lo puoi vedere con

+0

im utilizzando 2.1.2 versione – Charmie

+0

Domanda stupida, ma se si esegue un print_r o var_export di ($ dati) appena sopra la chiamata update_batch in update2(), si ottiene lo stesso array in cui è stato inoltrato? –

risposta

-2

provare questa speranza il suo lavoro

function update2($data){ 
    foreach($data as $string_val){ 
    $this->db->update_batch('users',$string_val, "id"); 
    } 
} 

o

function update2($data){ 
    foreach($data as $string_val){ 
    $this->db->update_batch('users',$string_val->first_name, "id"); 
    } 
} 
+0

uh un ciclo foreach ... grazie! funziona ... – Charmie

+9

Funziona ma vanifica lo scopo di utilizzare update_batch no? – Bretticus

45

Appena inciampato sullo stesso identico problema qui. Per fortuna, sto usando la stessa versione di CI. :)

È vero che la risposta di M_A_K consente di rimuovere "l'avviso", ma non penso che sia la soluzione giusta per il problema. Così ho deciso di dare un'occhiata alla riga in DB_active_rec.php e credo che questo non sia altro che un piccolo errore in CI 2.1.2.

Ecco la mia correzione. Ho semplicemente cambiato il codice originale:

$not[] = $k.'-'.$v; 

in questo:

$not[] = $k2.'-'.$v2; 

Voila! "Avviso" non appare più. :)

Possiamo vedere chiaramente che la riga 1407 non è stata concepita per utilizzare $ k e $ v perché la riga 1407 si trova all'interno di un ciclo foreach che itera su $ v come $ k2 e $ v2.

Spero di essere stato chiaro.

+4

Questo problema è stato corretto solo in CI 2.1.4, rilasciato l'8 luglio 2013, per chiunque ancora utilizzi la 2.1.3 e si imbattesse in questo problema. – JonoCoetzee

+0

Perché non cancellare semplicemente quelle linee? $ non non è usato da nessuna parte. Controlla la mia risposta qui sotto. – Tool

2

Appena realizzato che utilizzando un foreach come M_A_K suggerito effettivamente batte lo scopo di utilizzare la funzione update_batch. Questo perché utilizzando foreach, stiamo effettivamente eseguendo un singolo aggiornamento (non batch) per ogni elemento dell'array. Questo non è diverso rispetto all'utilizzo della funzione di aggiornamento (singolo) in CodeIgniter.

0

Mi sento sempre un po 'sporco per questo, ma puoi sempre eliminare gli errori anche per quella riga di codice!

function update2($data){ 
    @$this->db->update_batch('users',$data, "id"); 
} 

Naturalmente la cosa giusta da fare è aggiornare a 2.1.3 (non sono testati o sembrava così darò per scontato che è fisso.)

+0

Ok, non importa. Ho appena ripreso l'errore test (non sono sicuro del motivo per cui non l'ho visto ieri.) Non corretto in 2.1.3 apparentemente. Vado con la soppressione degli errori. ; - / – Bretticus

0

soluzione corretta è quella di rimuovere le linee 1401-1404 da DB_active_rec.php poiché la variabile $not non viene utilizzata da nessuna parte.

Problemi correlati