Problema con mysqli_num_rows

solari77

Utente Attivo
6 Ott 2016
119
1
18
Ciao a tutti.
Ho un problema con la funzione mysqli_num_rows

Codice:
$sql = "INSERT INTO tabella1 ( campo1 , campo2 , campo3 , campo4 ) values ( 'valore1' , 'valore2' , 'valore3' , 'valore4')";

$result = $mysqli->query($sql);

$num_rows = mysqli_num_rows($result);

var_dump($num_rows);

il risultato è sempre NULL nonostante la query scriva regolarmente sul database.
Dov'è che sbaglio ?
 

mr.x

Utente Attivo
9 Apr 2016
252
25
28
il risultato è sempre NULL nonostante la query scriva regolarmente sul database.
Dov'è che sbaglio ?

mysqli_num_rows ti restituisce il numero di righe lette, se scrivi....

es.
PHP:
$sql = "SELECT * FROM tabella1";

$result = $mysqli->query($sql);

$num_rows = mysqli_num_rows($result); // oppure
                                      //$num_rows = $result->num_rows;

var_dump($num_rows);
 

solari77

Utente Attivo
6 Ott 2016
119
1
18
Ciao, grazie per la cortese risposta.
Quindi mysqli_num_rows lo posso utilizzare solo con la SELECT e non con INSERT ?
 

solari77

Utente Attivo
6 Ott 2016
119
1
18
Grazie, come posso fare allora per sapere se
Codice:
$sql = "INSERT INTO tabella1 ( campo1 , campo2 , campo3 , campo4 ) values ( 'valore1' , 'valore2' , 'valore3' , 'valore4')";

$result = $mysqli->query($sql);

$result ha restituito una valore o se la insert non è andata a buon fine?
Quale istruzione posso usare?
 

solari77

Utente Attivo
6 Ott 2016
119
1
18
Grazie per la risposta.
Io se $result restituisce un valore, devo eseguire una determinata operazione.
Come posso inserirla nell'istruzione che mi hai dato?
Mi spiego meglio. Prima avevo
Codice:
$result = $mysqli->query($sql);

$num_rows = mysqli_num_rows($result)
if( $num_rows >0 )
{fai questo}
e questa espressione non funzionava.
Ora con il codice che mi hai fornito, come diventerebbe?
Grazie
 

mr.x

Utente Attivo
9 Apr 2016
252
25
28
PHP:
if ($mysqli->query($sql) === TRUE) {
    echo "query correttamente eseguita";
} else {
    echo "Error: " . $sql . "<br>" . $mysqli->error;
}

oppure con affect_rows o mysqli_stmt_affect_rows come consigliato da marino51 fecendo attenzione sulla query di INSERT e UPDATE.
 

solari77

Utente Attivo
6 Ott 2016
119
1
18
PHP:
if ($mysqli->query($sql) === TRUE) {
    echo "query correttamente eseguita";
} else {
    echo "Error: " . $sql . "<br>" . $mysqli->error;
}

Ciao ho provato questa soluzione ma funziona solo in parte
Codice:
$sql1 = "INSERT INTO tabella1 ( ………. )values (…………..)";
$result1 = $mysqli->query( $sql1 );
if ( $result1 === TRUE )
{
$sql2= " UPDATE tabella2 SET ………… ";
$result2 = $mysqli->query( $sql2);
if ( $result2 === TRUE )    {questa istruzione viene eseguita ogni volta che risulta vera la condizione $result1}
}

La prima condizione funziona , mentre la seconda viene eseguita sempre,anche se direttamente da phpMyAdmin, la stessa update da il risultato "0 righe modificate. (La query ha impiegato 0.0012 secondi.) ".
L'unica differenza è che la prima è una INSERT mentre la seconda è una UPDATE
 
Ultima modifica:

macus_adi

Utente Attivo
5 Dic 2017
1.333
91
48
IT/SW
Cortesemente traduci questo: Returns FALSE on failure. For successful SELECT, SHOW, DESCRIBE or EXPLAIN queries mysqli_query() will return a mysqli_result object. For other successful queries mysqli_query() will return TRUE.
se non è una select (insert/update ...) torna VERO, di conseguenza:
No viene eseguita se $result1 e $result2 sono vere!

Io però ho scritto quello che succede a me e che non risponde alla teoria
Non so che studi hai fatto, posso però garantire che NON è assolutamente come dici... LEGGI (cosa che non si usa più fare) la documentazione prima di utilizzare i metodi.
-----------------------------------------
Stai utilizzando un set di istruzioni, il che per ovvi motivi DEVONO comportarsi come in TEORIA (non avrebbe senso studiare), se qualcosa non funziona sicuramente il flusso logico è errato (come la maggior parte degli errori).

Butta giù due righe, un diagramma di flusso, uno linguaggio naturale, un UML, un caso d'uso, poi ne riparliamo...
 

solari77

Utente Attivo
6 Ott 2016
119
1
18
Cortesemente traduci questo: Returns FALSE on failure. For successful SELECT, SHOW, DESCRIBE or EXPLAIN queries mysqli_query() will return a mysqli_result object. For other successful queries mysqli_query() will return TRUE.
se non è una select (insert/update ...) torna VERO, di conseguenza:



Non so che studi hai fatto, posso però garantire che NON è assolutamente come dici... LEGGI (cosa che non si usa più fare) la documentazione prima di utilizzare i metodi.
-----------------------------------------
Stai utilizzando un set di istruzioni, il che per ovvi motivi DEVONO comportarsi come in TEORIA (non avrebbe senso studiare), se qualcosa non funziona sicuramente il flusso logico è errato (come la maggior parte degli errori).

Butta giù due righe, un diagramma di flusso, uno linguaggio naturale, un UML, un caso d'uso, poi ne riparliamo...

Io ho semplicemente provato ad utilizzare un metodo che mi è stato suggerito in questo post.
Non ho fatto studi informatici, per questo che chiedo aiuto. Altrimenti non avrei scritto qui.
Codice:
$sql1 = "INSERT INTO tabella1 ( ………. )values (…………..)";
$result1 = $mysqli->query( $sql1 );
if ( $result1 === TRUE )
{
$sql2= " UPDATE tabella2 SET ………… ";
$result2 = $mysqli->query( $sql2);
if ( $result2 === TRUE )    {questa istruzione viene eseguita ogni volta che risulta vera la condizione $result1}
}
questo è il mio codice.Chiaramente è sbagliato. Stò chiedendo aiuto per risolverlo.

Se la INSERT restituisce almeno una riga allora devo passare all' UPDATE,Se anche questa restituisce almeno una riga devo eseguire un'altra istruzione.
Io ho scritto prima tutto ciò.Non ho capito se c'è qualcosa che non è chiaro
 

macus_adi

Utente Attivo
5 Dic 2017
1.333
91
48
IT/SW
Quale parte non è chiara di questo:
Returns FALSE on failure. For successful SELECT, SHOW, DESCRIBE or EXPLAIN queries mysqli_query() will return a mysqli_result object. For other successful queries mysqli_query() will return TRUE.

insert=>true,
update=>true,

delete=>true


Capisco.... Hai pensato ad effettuare la prima una select e solo dopo controlli ?

PHP:
public function find_actions($data){
     $res=$this->db->where('id',$data['id'])->toArray();
     (empty($res))?$this->elab($data):$this->elab($data,'update');
}

private function elab($data,$type='insert'){
     switch($type){
               case 'update':
                          $this->db->update(TABELLA,$data,['id'=>$data['id']]);
                    break;
               default: $this->db->insert(TABELLA,$data);
      }
}
 

solari77

Utente Attivo
6 Ott 2016
119
1
18
Capisco.... Hai pensato ad effettuare la prima una select e solo dopo controlli ?


No, prima faccio una INSERT su una tabella. Poi ,solo se questa va a buon fine faccio su'un altra tabella un UPDATE.

Però vedo che tu stesso mi hai proposto 2 soluzioni diverse.
PHP:
try{
$result = $mysqli->query($sql);

}catch(exception $e){
dd($e);
}
Ti avevo chiesto di aiutarmi ad inserire la tua soluzione nel mio codice ma non mi hai risposto. Ora mi proponi un'altra soluzione.
Sono sincero, ho difficoltà a seguirti. Sicuramente è colpa mia, però non capisco.
 

macus_adi

Utente Attivo
5 Dic 2017
1.333
91
48
IT/SW
.... Il primo suggerimento si riferiva a questa richiesta
$result ha restituito una valore o se la insert non è andata a buon fine?
Quale istruzione posso usare?
Il secondo ad una più ampia ....


No, prima faccio una INSERT su una tabella. Poi ,solo se questa va a buon fine faccio su'un altra tabella un UPDATE.
?????
Se la necessità è quella sopra hai fatto bene a fare come hai fatto!
 

mr.x

Utente Attivo
9 Apr 2016
252
25
28
@solari77

una query ti restituisce TRUE quando viene correttamente eseguita.
Un UPDATE che ha effetto su zero riga non è una condizione di errore, è una query che è stata eseguita senza modificare nulla.

Se ti serve conoscere il numero di righe in cui son stati modificati(aggiornati) valori utilizza affect_rows, come gia infdicato, oppure info (mysqli->info) che ti restituisce l'esito di ogni operazione.

PHP:
$sql2= " UPDATE tabella2 SET ………… ";
$result2 = $mysqli->query( $sql2);
if ($mysqli->affected_rows > 0) echo $mysqli->affected_rows;


PHP:
$sql2= " UPDATE tabella2 SET ………… ";
$result2 = $mysqli->query( $sql2);
printf("%s\n", $mysqli->info);
 

solari77

Utente Attivo
6 Ott 2016
119
1
18
@solari77

una query ti restituisce TRUE quando viene correttamente eseguita.
Un UPDATE che ha effetto su zero riga non è una condizione di errore, è una query che è stata eseguita senza modificare nulla.

Se ti serve conoscere il numero di righe in cui son stati modificati(aggiornati) valori utilizza affect_rows, come gia infdicato, oppure info (mysqli->info) che ti restituisce l'esito di ogni operazione.

PHP:
$sql2= " UPDATE tabella2 SET ………… ";
$result2 = $mysqli->query( $sql2);
if ($mysqli->affected_rows > 0) echo $mysqli->affected_rows;


PHP:
$sql2= " UPDATE tabella2 SET ………… ";
$result2 = $mysqli->query( $sql2);
printf("%s\n", $mysqli->info);

Ho provato questa soluzione e sembra funzionare.
Chiedo scusa a @marino51 perchè mi aveva dato la soluzione ma avevo preso un'altra strada.
Faccio ulteriori test e aggiorno.
Grazie
 
Discussioni simili
Autore Titolo Forum Risposte Data
A PROBLEMA: insert mysqli con dati Tagsinput Presentati al Forum 0
M Problema con connessione MySqli e funzione PHP 2
P problema conessione dati con mysqli PHP 2
S Problema con mysqli PHP 2
M Problema con Try Catch PHP 0
Sergio Unia Problema con gli eventi del mouse su una data table: Javascript 2
T PROBLEMA CON SESSIONI PHP 3
T ALTRO PROBLEMA CON ARRAY PHP PHP 1
T PROBLEMA CON ARRAY PHP 8
L problema con query select PHP 2
R Problema query con ricerca id numerico PHP 2
F Problema con risposta PHP 0
S problema con recupero dati tabella mysql PHP 2
Z Problema con il mio tp-l i nk Reti LAN e Wireless 1
L Problema RAM con Tomcat 8 Apache 0
napuleone problema con sort e asort PHP 4
Z Problema con INT MySQL PHP 1
Z Problema database MySQL con XAMPP PHP 0
M Problema con controllo form in real time jQuery 6
Z Problema di sincronizzazione PAYPAL con PHP PHP 1
G Problema con Get page PHP 4
P Problema con require once PHP 6
P Problema con i package Java 1
A Problema login con Safari PHP 14
F INDESIGN: problema esportazione esecutivo per la stampa con foto B/N Webdesign e Grafica 1
S problema con css bootstrap3 HTML e CSS 4
M .load() problema con caricamenti dinamici di js Javascript 0
G Problema ------- con Query PHP 1
G Problema con Query PHP 1
T problema con select dinamica con jquery Javascript 0
S Problema con spazi bianchi HTML e CSS 5
Tommy03 Problema con z-index HTML e CSS 3
M Problema inserimento parole con apostrofo nel db PHP 5
C Problema con dati meteo xml XML 1
S Problema con infrarossi videocamera IP Cam e Videosorveglianza 1
V Problema con librerie allegro5 c++ C/C++ 1
M Problema con php per calcolo costo percentuale PHP 7
grgfede Problema javascript con aruba Javascript 1
M Problema con visibility e radio button Javascript 2
Marti1! Problema con casella mail cancellata Posta Elettronica 3
L [PHP] Problema con Telegram PHP 1
tomorc [HTML] Problema con scroll bar (risolto) HTML e CSS 0
S Strano problema con i title su Google SEO e Posizionamento 3
P [ASP.Net] Problema ERR_INCOMPLETE_CHUNKED_ENCODING 206 (Partial Content) con Font ASP.NET 4
P [HTML] Problema ERR_INCOMPLETE_CHUNKED_ENCODING 206 (Partial Content) con Font HTML e CSS 1
N [Apache] problema con estensione php Apache 0
C [PHP] Problema con download file PHP 0
M [PHP] Problema con preg_match PHP 1
gandalf1959 [PHP] problema con l'utilizzo di Header PHP 3
M [PHP] Problema con query select PHP 2

Discussioni simili