Pagina 1 di 2 12 UltimoUltimo
Visualizzazione risultati 1 fino 30 di 37
Like Tree3Likes

Discussione: codice PDO php per contare i record tabella mysql

  1. #1
    leonardomoretti non è connesso Utente giovane
    Data registrazione
    22-07-2020
    Messaggi
    34

    Predefinito codice PDO php per contare i record tabella mysql

    Buonasera,
    non riesco a capire come recuperare il conteggio della query SELECT COUNT(*) FROM MEASUREMENTS", tutti i codici trovati generano errori.
    Vi allego il codice che rilascia errore grazie mille:
    PS: in alternativa posso risolvere anche conoscendo il valore della prima cella contenuta nell'ultimo record di mysql .

    Fatal error: Call to undefined method mysqli_result::fetchAll() in /membri/leonardomoretti/getdatafromMCUtoMysql2.php on line 69

    Codice PHP:
    $query=("SELECT COUNT(*) FROM MEASUREMENTS");
        
    $result $db_connection->query($query)->fetchAll();
        if (
    count($result) > 0) {
           foreach (
    $result as $row) {
           echo 
    $row['blah'] . '<br />';
           }
        } else {
               echo 
    "<p>Nothing matched your query.</p>";
            } 
    Ultima modifica di leonardomoretti : 31-07-2020 alle ore 19.06.46

  2. #2
    GraphOGLRisorse è connesso ora AlterGuru
    Data registrazione
    14-02-2015
    Messaggi
    1,098

    Predefinito

    Salve,
    mi pare di capire che lei abbia usato mysqli nel resto del codice e non pdo.

    Prvi così:
    Codice PHP:
    $query=("SELECT COUNT(*) FROM MEASUREMENTS");
        
    $result $db_connection->query($query);
        
        
    $result -> fetch_all(MYSQLI_ASSOC);

        if (
    count($result) > 0) {
           foreach (
    $result as $row) {
           echo 
    $row['blah'] . '<br />';
           }
        } else {
               echo 
    "<p>Nothing matched your query.</p>";
            } 
    Cordiali saluti.

  3. #3
    leonardomoretti non è connesso Utente giovane
    Data registrazione
    22-07-2020
    Messaggi
    34

    Predefinito

    < mi pare di capire che lei abbia usato mysqli nel resto del codice e non pdo. > si sto usando il vostro mysql con PDO.

    niente il codice sopra rilascia i seguenti errori:
    Codice PHP:
    NoticeUndefined variablequery in /membri/leonardomoretti/getdatafromMCUtoMysql2.php on line 69

    Warning
    mysqli::query(): Empty query in /membri/leonardomoretti/getdatafromMCUtoMysql2.php on line 69

    Fatal error
    Call to a member function fetch_all() on boolean in /membri/leonardomoretti/getdatafromMCUtoMysql2.php on line 71 
    linea 69: $result = $db_connection->query($query);
    linea 71: $result -> fetch_all(MYSQLI_ASSOC);

    io avrei trovato dell'altro codice da adattare ma mi sembra alquanto ingarbugliato:
    Codice PHP:
    $n DB::n_table_rows(_CONFIG_['_DB_']['_PREFIX_'].'rubrica', array("count"=>"id""where"=>" nome LIKE '%leo%'"));
        echo 
    $n
    PS: Faccio una precisazione a me serve sapere l'ultimo numero ID della riga della tabella perchè ID è chiave unica e quando inserisco un nuovo record devo poter immettere anche il campo ID +1 nella query. Alcuni hanno risolto impostanto nel mysql ID come auto-increment ma non ho trovato le voci ! se fosse possibile questo devo omettere il campo ID nella query?
    Ultima modifica di leonardomoretti : 31-07-2020 alle ore 19.43.54

  4. #4
    GraphOGLRisorse è connesso ora AlterGuru
    Data registrazione
    14-02-2015
    Messaggi
    1,098

    Predefinito

    Provi questo:
    Codice PHP:
        $result $db_connection->query("SELECT COUNT(*) FROM MEASUREMENTS");        
            
        if (
    count($result) > 0) {    
           while(
    $row=$result->fetch_array(MYSQLI_ASSOC)){
             echo 
    $row['blah'] . '<br />';
          {
        }else
        echo 
    "<p>Nothing matched your query.</p>"
    Se per lei non è un problema, può mostrare l'intero codice php?

    Cordiali saluti.

  5. #5
    leonardomoretti non è connesso Utente giovane
    Data registrazione
    22-07-2020
    Messaggi
    34

    Predefinito

    no no è un problema,in codice sopra da questo errore:

    Parse error: syntax error, unexpected 'else' (T_ELSE) in /membri/leonardomoretti/getdatafromMCUtoMysql2.php on line 76

    linea 76: else echo "<p>Nothing matched your query.</p>";

    PS: Faccio una precisazione a me serve sapere l'ultimo numero ID della riga della tabella perchè ID è chiave unica e quando inserisco un nuovo record devo poter immettere anche il campo ID +1 nella query. Alcuni hanno risolto impostanto nel mysql ID come auto-increment ma non ho trovato le voci ! se fosse possibile questo devo omettere il campo ID nella query?

    questa è una pagina che prende i dati da http:\\nome sito.php ?data=4,device01,31.6,55
    i dati sono separati da virgole: 4,device01,31.6,55
    Codice PHP:

    <?php
    /*mysqli e pdo library*/
    /*
    date_default_timezone_set('Europe/Warsaw');
    $today = new DateTime();
    $today = date("F j, Y, g:i a");                 // March 10, 2001, 5:16 pm
    $today = date("m.d.y");                         // 03.10.01
    $today = date("j, n, Y");                       // 10, 3, 2001
    $today = date("Ymd");                           // 20010310
    $today = date('h-i-s, j-m-y, it is w Day');     // 05-16-18, 10-03-01, 1631 1618 6 Satpm01
    $today = date('\i\t \i\s \t\h\e jS \d\a\y.');   // it is the 10th day.
    $today = date("D M j G:i:s T Y");               // Sat Mar 10 17:16:18 MST 2001
    $today = date('H:m:s \m \i\s\ \m\o\n\t\h');     // 17:03:18 m is month
    $today = date("H:i:s");                         // 17:16:18
    $today = date("Y-m-d H:i:s");                   // 2001-03-10 17:16:18 (the MySQL DATETIME format)
    */
    /*
    $query = mysql_query("SELECT COUNT(*) FROM MEASUREMENTS");
        while($row = mysql_fetch_array($query)){
            echo "Ci sono ". $row['COUNT(id)'] ." users nel database...";
        }
    */
    error_reporting(E_ALL);

    $USERNAME "leonardomoretti";
    $PASSWORD null;
    $DBSERVER"localhost";
    $DBNAME "my_leonardomoretti";

    if(!(
    $db_connection = new mysqli($DBSERVER$USERNAME$PASSWORD$DBNAME)))
       die(
    'Connect Error (' $db_connection->connect_errno ') '$db_connection->connect_error);

    if(!(
    $db_selection $db_connection->select_db($DBNAME)))
       die (
    "Errore nella selezione del DB.");


        
    $vdata$_REQUEST['data'];
        
    /* echo "$vdata"; */
        
    $string explode(',',$vdata); /*SEPARA IN PARORE LA STRINGA INTERA SEPARATA DAL CARATTERE "," E LE METTE NEL VETTORE */
        /*
        echo "
             $string[0] ". " 
             $string[1] ". "
             $string[2] ". "
             $string[3] ". "
             "; */
        
    date_default_timezone_set('Europe/Warsaw');
        
    $date=date ("Y-m-d");
        
    $time=date("H:i:s");
        
    $progressive=(int)$string[0];
        
    $device=$string[1];
        
    $data1=(float)$string[2];
        
    $data2=(float)$string[3];

        
    /*
        echo "
            $date "." $time "." $device "." $data1 "." $data2 ". "
            "; 
        */
        /*SELECT COUNT(*) FROM tabella;*/
        /* $numberrows */
        /*
        $query = mysql_query("SELECT COUNT(*) FROM MEASUREMENTS");
        while($row = mysql_fetch_array($query)){
            echo "Ci sono ".$row." users nel database...";
        }
        */
        /* $query=("SELECT COUNT(*) FROM MEASUREMENTS"); */
        
    $result $db_connection->query("SELECT COUNT(*) FROM MEASUREMENTS");        
            
        if (
    count($result) > 0) {    
           while(
    $row=$result->fetch_array(MYSQLI_ASSOC)){
             echo 
    $row['blah'] . '<br />';
          {
        }
        else  echo 
    "<p>Nothing matched your query.</p>"
            
        
    $query=("INSERT INTO MEASUREMENTS (ID,DATA, TIME, DEVICE, DATA1, DATA2) VALUES ( '$progressive','$date', '$time', '$device', '$data1', '$data2')");
        if(
    mysqli_query($db_connection$query)){
            echo 
    "Records inserted successfully.";
        } else{
                echo 
    "ERROR: Could not able to execute $query. " mysqli_error($db_connection);
              }

    $db_connection->close();
    ?>
    Ultima modifica di leonardomoretti : 31-07-2020 alle ore 20.00.52

  6. #6
    GraphOGLRisorse è connesso ora AlterGuru
    Data registrazione
    14-02-2015
    Messaggi
    1,098

    Predefinito

    Per la linea 76, aggiunga le parentesi graffe prima e dopo la echo oppure modifichi così:
    Codice PHP:
    die ("<p>Nothing matched your query.</p>"); 
    Per calcolare l'ultimo id, può usare insert_id:
    Codice PHP:
    if($result) {echo $db_connection->insert_id '<br />';}
    else {echo 
    "Errore query: " $db_connection->error;} 
    Cordiali saluti.
    Ultima modifica di GraphOGLRisorse : 31-07-2020 alle ore 20.30.20

  7. #7
    leonardomoretti non è connesso Utente giovane
    Data registrazione
    22-07-2020
    Messaggi
    34

    Predefinito

    Buonasera,
    ricapitolando ho aggiunto queste righe:

    Codice PHP:
    $result $db_connection->query("SELECT COUNT(*) FROM MEASUREMENTS");        
            
        if(
    $result) {echo $db_connection->insert_id '<br />';}
        else {echo 
    "Errore query: " $db_connection->error;} 
    al posto di queste:
    Codice PHP:
    $result $db_connection->query("SELECT COUNT(*) FROM MEASUREMENTS"); 
    if (
    count($result) > 0) {    
           while(
    $row=$result->fetch_array(MYSQLI_ASSOC)){
             echo 
    $row['blah'] . '<br />';
          {
        }
        else { echo 
    "<p>Nothing matched your query.</p>"; } 
    adesso non ho errori ma il numero di righe che mi scrive 0 (zero) invece di 3.

    Ho pulito il codice per renderlo più leggibile ed è il seguente:
    Codice PHP:
    <?php
    /*mysqli e pdo library*/
    /*
    date_default_timezone_set('Europe/Warsaw');
    $today = new DateTime();
    $today = date("F j, Y, g:i a");                 // March 10, 2001, 5:16 pm
    $today = date("m.d.y");                         // 03.10.01
    $today = date("j, n, Y");                       // 10, 3, 2001
    $today = date("Ymd");                           // 20010310
    $today = date('h-i-s, j-m-y, it is w Day');     // 05-16-18, 10-03-01, 1631 1618 6 Satpm01
    $today = date('\i\t \i\s \t\h\e jS \d\a\y.');   // it is the 10th day.
    $today = date("D M j G:i:s T Y");               // Sat Mar 10 17:16:18 MST 2001
    $today = date('H:m:s \m \i\s\ \m\o\n\t\h');     // 17:03:18 m is month
    $today = date("H:i:s");                         // 17:16:18
    $today = date("Y-m-d H:i:s");                   // 2001-03-10 17:16:18 (the MySQL DATETIME format)
    */

    error_reporting(E_ALL);

    $USERNAME "leonardomoretti";
    $PASSWORD null;
    $DBSERVER"localhost";
    $DBNAME "my_leonardomoretti";

    if(!(
    $db_connection = new mysqli($DBSERVER$USERNAME$PASSWORD$DBNAME)))
       die(
    'Connect Error (' $db_connection->connect_errno ') '$db_connection->connect_error);

    if(!(
    $db_selection $db_connection->select_db($DBNAME)))
       die (
    "Errore nella selezione del DB.");


        
    $vdata$_REQUEST['data'];
        
        
    $string explode(',',$vdata); /*SEPARA IN PARORE LA STRINGA INTERA SEPARATA DAL CARATTERE "," E LE METTE NEL VETTORE */
        
        
    date_default_timezone_set('Europe/Warsaw');
        
    $date=date ("Y-m-d");
        
    $time=date("H:i:s");
        
    $progressive=(int)$string[0];
        
    $device=$string[1];
        
    $data1=(float)$string[2];
        
    $data2=(float)$string[3];
            
        
    $result $db_connection->query("SELECT COUNT(*) FROM MEASUREMENTS");        
            
        if(
    $result) {echo $db_connection->insert_id '<br />';}
        else {echo 
    "Errore query: " $db_connection->error;} 
        
        
    $query=("INSERT INTO MEASUREMENTS (ID,DATA, TIME, DEVICE, DATA1, DATA2) VALUES ( '$progressive','$date', '$time', '$device', '$data1', '$data2')");
        if(
    mysqli_query($db_connection$query)){
            echo 
    "Records inserted successfully.";
        } else{
                echo 
    "ERROR: Could not able to execute $query. " mysqli_error($db_connection);
              }

    $db_connection->close();
    ?>
    Ultima modifica di leonardomoretti : 31-07-2020 alle ore 20.58.07

  8. #8
    GraphOGLRisorse è connesso ora AlterGuru
    Data registrazione
    14-02-2015
    Messaggi
    1,098

    Predefinito

    Penso dipenda dall'impostazione della query:

    La modifichi così:
    Codice PHP:
    $result $db_connection->query("SELECT * FROM MEASUREMENTS"); 
    Cordiali saluti.
    .

  9. #9
    leonardomoretti non è connesso Utente giovane
    Data registrazione
    22-07-2020
    Messaggi
    34

    Predefinito

    Buonasera,
    Da sempre 0 (zero)

  10. #10
    GraphOGLRisorse è connesso ora AlterGuru
    Data registrazione
    14-02-2015
    Messaggi
    1,098

    Predefinito

    Dopo error_reporting(E_ALL) aggiunga:
    Codice PHP:
    function mysqli_result($result,$row=0,$field=0)
    {

        
    $numrows $result->num_rows;
        
        if (
    $numrows && $row <= ($numrows-1) && $row >=0){
            
    $result->data_seek(0);
            
    $result->data_seek($row);
            
    $resrow = (is_numeric($field)) ? mysqli_fetch_row($result) : mysqli_fetch_assoc($result);
            
            if (!isset(
    $resrow[$field])){return $row;}
        }
        return 
    false;

    Sostituisca questo:
    Codice PHP:
    if($result) {echo $db_connection->insert_id '<br />';}
    else {echo 
    "Errore query: " $db_connection->error;} 
    con questo:
    Codice PHP:
            $numr=$result->num_rows;
            
    $i=0$valmax=0;
            
             while (
    $i $numr) {
                
    $valore=mysqli_result($result,$i,"Id");
                if (
    $valore>$valmax) {
                    
    $valmax=$valore
                    } 
                 
    $i++;       
             }
             
    $result->free();
             if(
    $db_connection->more_results())
             
    $db_connection->next_result();
            
            
    $ultimo_id=$valmax+1;    

            echo 
    $ultimo_id '<br />'
    Il campo con "id"($field) in mysqli_result deve essere scritto identico a come è nel database.

    Cordiali saluti.
    .
    Ultima modifica di GraphOGLRisorse : 31-07-2020 alle ore 21.45.12

  11. #11
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,696

    Predefinito

    PS: Faccio una precisazione a me serve sapere l'ultimo numero ID della riga della tabella perchè ID è chiave unica e quando inserisco un nuovo record devo poter immettere anche il campo ID +1 nella query. Alcuni hanno risolto impostanto nel mysql ID come auto-increment ma non ho trovato le voci ! se fosse possibile questo devo omettere il campo ID nella query?
    Al netto della discussione intavolata fin'ora, perché non seguire questo buon consiglio e impostare la colonna id come AUTO_INCREMENT? Non solo è l'approccio più standard e consolidato in assoluto, ma rende costante il costo di un inserimento (a differenza del costo lineare dell'algoritmo proposto)...

    I suggerimenti che do più spesso:


  12. #12
    GraphOGLRisorse è connesso ora AlterGuru
    Data registrazione
    14-02-2015
    Messaggi
    1,098

    Predefinito

    La ringrazio mzanella della precisazione. Mi ero distratto con le mie idee al riguardo e mi ero dimenticato di quella domanda su auto-increment.

    leonardomoretti le rispondo adesso, si il campo id viene omesso con auto-increment. Quindi il pezzo di codice per il calcolo dell'id può essere tolto, comresa la rispettiva quesry.

    Aggiungo anche che è preferibile usare per la query record stamnet.

    Sostituire questo:
    Codice PHP:
        $query=("INSERT INTO MEASUREMENTS (ID,DATA, TIME, DEVICE, DATA1, DATA2) VALUES ( '$progressive','$date', '$time', '$device', '$data1', '$data2')");
        if(
    mysqli_query($db_connection$query)){
            echo 
    "Records inserted successfully.";
        } else{
                echo 
    "ERROR: Could not able to execute $query. " mysqli_error($db_connection);
              } 
    con questo:
    Codice PHP:
        $query=("INSERT INTO MEASUREMENTS (DATA, TIME, DEVICE, DATA1, DATA2) VALUES (?, ?, ?, ?, ?)"); 
         
        if(
    $stmt $db_connection->prepare($query)) {
        
    $stmt->bind_param("iisss"$date$time$device$data1$data2);
        
    $result $stmt->execute();
        
    $stmt->store_result();
        echo 
    "%d Row inserite.\n"$db_connection->affected_rows;
        
    $stmt->free_result();
        if(
    $stmt->more_results())
        
    $stmt->next_result();
        
    $stmt->close();
        
        echo 
    "Records inserted successfully.";    
        }else{
                echo 
    "ERROR: Could not able to execute $query. " mysqli_error($db_connection);
              } 
    Cordiali saluti.
    .
    Ultima modifica di GraphOGLRisorse : 01-08-2020 alle ore 14.59.02

  13. #13
    leonardomoretti non è connesso Utente giovane
    Data registrazione
    22-07-2020
    Messaggi
    34

    Predefinito

    Buongiorno,
    Ho sostituito il codice di inserimento della query vecchio con il seguente:
    Codice PHP:
    $query=("INSERT INTO MEASUREMENTS (DATA, TIME, DEVICE, DATA1, DATA2) VALUES ('$date', '$time', '$device', '$data1', '$data2')"); 
         
        if(
    $stmt $db_connection->prepare($query)) {
        
    $stmt->bind_param("iisss"$date$time$device$data1$data2);
        
    $result $stmt->execute();
        
    $stmt->store_result();
        echo 
    "%d Row inserite.\n"$db_connection->affected_rows;
        
    $stmt->free_result();
        if(
    $stmt->more_results())
        
    $stmt->next_result();
        
    $stmt->close();
        
        echo 
    "Records inserted successfully.";    
        }else{
                echo 
    "ERROR: Could not able to execute $query. " mysqli_error($db_connection);
              } 
    mi da sempre codici di errore a linea 89
    $stmt->bind_param("iisss", $date, $time, $device, $data1, $data2);

    Warning: mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement in /membri/leonardomoretti/getdatafromMCUtoMysql2.php on line 89
    %d Row inserite. -1Records inserted successfully.
    Inoltre ho provato (da database vuoto) a lanciare il codice sql:
    ALTER TABLE MEASUREMENTS AUTO_INCREMENT = 1
    ma credo manchi qualche cosa che fa capire quale campo deve essere autoinclementato-
    per fare diventare progressivo il campo "id" la query va a buon fine ma non sortisce l'effetto desiderato, non si incrementa da solo anzi dopo il primo inserimento con id = 0 se inserisco altri dati dalla pagina php mi dice (giustamente) che ID è chiave primaria e che c'e un duplicato ossia un altro "id=0" questo perche non si auto incrementa.
    Come posso fare, grazie.
    Ultima modifica di leonardomoretti : 01-08-2020 alle ore 11.45.54

  14. #14
    leonardomoretti non è connesso Utente giovane
    Data registrazione
    22-07-2020
    Messaggi
    34

    Predefinito

    Buongiono ,
    Ci sono riuscito a mettere l'AUTO_INCREMENT, dall'applicazione mysqlphp su <struttura> <modifica campo id> c'e un flag a destra della pagina si chiama "A_I" ho salvato il tutto e tutto è andato a buon fine.
    Resta da verificare il seguente errore warning alla righa 89.

    $stmt->bind_param( "iisss", $date, $time, $device, $data1, $data2); // "iisss",

    i campi ci sono tutti non capisco !!!!

    Warning: mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement in /membri/leonardomoretti/getdatafromMCUtoMysql2.php on line 89
    %d Row inserite. 1Records inserted successfully.

  15. #15
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,696

    Predefinito

    Sostituisci il codice che hai usato tu:
    Codice PHP:
    $query=("INSERT INTO MEASUREMENTS (DATA, TIME, DEVICE, DATA1, DATA2) VALUES ('$date', '$time', '$device', '$data1', '$data2')"); 
    con quello corretto indicato dal buon GraphOGLRisorse:
    Codice PHP:
        $query=("INSERT INTO MEASUREMENTS (DATA, TIME, DEVICE, DATA1, DATA2) VALUES (?, ?, ?, ?, ?)"); 
    In realtà le parentesi attorno alla stringa non servono a nulla, tanto vale rimuoverle:
    Codice PHP:
        $query "INSERT INTO MEASUREMENTS (DATA, TIME, DEVICE, DATA1, DATA2) VALUES (?, ?, ?, ?, ?)"
    Ultima modifica di mzanella : 01-08-2020 alle ore 12.23.25

    I suggerimenti che do più spesso:


  16. #16
    leonardomoretti non è connesso Utente giovane
    Data registrazione
    22-07-2020
    Messaggi
    34

    Predefinito

    Buonasera niente sempre la stessa warning:
    Warning: mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement in /membri/leonardomoretti/getdatafromMCUtoMysql2.php on line 89
    %d Row inserite. 1Records inserted successfully.
    A popolare nuovi record , malgrado le wanning, li popola bene questo script al di la di questo la pagina sta funzionando.
    A limite proveremo lunedì con GraphOGLRisorse.
    buon fine settimana a tutti.
    Ultima modifica di leonardomoretti : 01-08-2020 alle ore 17.00.12

  17. #17
    GraphOGLRisorse è connesso ora AlterGuru
    Data registrazione
    14-02-2015
    Messaggi
    1,098

    Predefinito

    Ricambio l'augurio.

    Ricontrollando il codice completo messo in precedenza, mi sono accorto di non aver notato che $data1 e $data2, sono state convertite da stringhe a valori float. Quindi, se non può fare a meno della conversione in float per tali valori, essi, vanno indicati come double in $stmt->bind_param().

    Di conseguenza, va sostituito quello con iisss:
    Codice PHP:
    $stmt->bind_param("iisss"$date$time$device$data1$data2); 
    con questo con iisdd:
    Codice PHP:
    $stmt->bind_param("iisdd"$date$time$device$data1$data2); 
    Cordiali saluti.

  18. #18
    leonardomoretti non è connesso Utente giovane
    Data registrazione
    22-07-2020
    Messaggi
    34

    Predefinito

    Buongiorno,
    Ho tolto la conversione da stringa a float delle variabili:
    Codice PHP:
    $data1=$string[1];
    $data2=$string[2]; 
    Ho inserito i seguente codice di scrittura che mi avete suggerito:
    Codice PHP:
    $query "INSERT INTO MEASUREMENTS (DATA, TIME, DEVICE, DATA1, DATA2) VALUES ('$date', '$time', '$device', '$data1', '$data2')"
        if(
    $stmt $db_connection->prepare($query)) {
        
    $stmt->bind_param"iisss"$date$time$device$data1$data2); // "iisss",
        //$stmt->bind_param("iisdd", $date, $time, $device, $data1, $data2);  // se si usano variabili float
        
    $result $stmt->execute();
        
    $stmt->store_result();
        echo 
    "%d Row inserite.\n"$db_connection->affected_rows;
        
    $stmt->free_result();
        if(
    $stmt->more_results())
        
    $stmt->next_result();
        
    $stmt->close(); 
    l'errore warning continua ad essere visualizzato:
    Warning: mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement in /membri/leonardomoretti/getdatafromMCUtoMysql2.php on line 89
    %d Row inserite. 1Records inserted successfully.
    Attendo Vs notizie grazie.
    Ultima modifica di leonardomoretti : 03-08-2020 alle ore 12.02.16

  19. #19
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,696

    Predefinito

    Quello non è il codice suggerito .

    Codice PHP:
    $query "INSERT INTO MEASUREMENTS(DATA, TIME, DEVICE, DATA1, DATA2) VALUES (?, ?, ?, ?, ?)"

    I suggerimenti che do più spesso:


  20. #20
    leonardomoretti non è connesso Utente giovane
    Data registrazione
    22-07-2020
    Messaggi
    34

    Predefinito

    Questo è il codice suggerito:
    Codice PHP:
    $query=("INSERT INTO MEASUREMENTS (DATA, TIME, DEVICE, DATA1, DATA2) VALUES (?, ?, ?, ?, ?)"); 
         
        if(
    $stmt $db_connection->prepare($query)) {
        
    $stmt->bind_param("iisss"$date$time$device$data1$data2);
        
    $result $stmt->execute();
        
    $stmt->store_result();
        echo 
    "%d Row inserite.\n"$db_connection->affected_rows;
        
    $stmt->free_result();
        if(
    $stmt->more_results())
        
    $stmt->next_result();
        
    $stmt->close();
        
        echo 
    "Records inserted successfully.";    
        }else{
                echo 
    "ERROR: Could not able to execute $query. " mysqli_error($db_connection);
              } 
    Questo è quello modificato in base ai Vs suggerimenti, cosa c'è di diverso? le parentesi attorno alla stringa? mzanella non mi aveva detto che erano superflue? !
    Codice PHP:
    $query "INSERT INTO MEASUREMENTS (DATA, TIME, DEVICE, DATA1, DATA2) VALUES ('$date', '$time', '$device', '$data1', '$data2')"
        if(
    $stmt $db_connection->prepare($query)) {
        
    $stmt->bind_param"iisss"$date$time$device$data1$data2);
        
    $result $stmt->execute();
        
    $stmt->store_result();
        echo 
    "%d Row inserite.\n"$db_connection->affected_rows;
        
    $stmt->free_result();
        if(
    $stmt->more_results())
        
    $stmt->next_result();
        
    $stmt->close();
        
        echo 
    "Records inserted successfully.";    
        }else{
                echo 
    "ERROR: Could not able to execute $query. " mysqli_error($db_connection);
              } 
    Ultima modifica di leonardomoretti : 04-08-2020 alle ore 19.28.56

  21. #21
    GraphOGLRisorse è connesso ora AlterGuru
    Data registrazione
    14-02-2015
    Messaggi
    1,098

    Predefinito

    Glie lo ha messo in evidenza per ben 2 volte mzanella.

    Allora, lei non ha aggiornato la stringa della query. Al posto delle varisabili, ci vanno i ?, che hanno valenza di segna posto.
    Codice PHP:
    // vecchio
    $query "INSERT INTO MEASUREMENTS (DATA, TIME, DEVICE, DATA1, DATA2) VALUES ('$date', '$time', '$device', '$data1', '$data2')";
    // nuovo
    $query "INSERT INTO MEASUREMENTS (DATA, TIME, DEVICE, DATA1, DATA2) VALUES (?, ?, ?, ?, ?)"
    Cordiali saluti.
    Ultima modifica di GraphOGLRisorse : 04-08-2020 alle ore 19.41.43
    mzanella likes this.

  22. #22
    leonardomoretti non è connesso Utente giovane
    Data registrazione
    22-07-2020
    Messaggi
    34

    Predefinito

    Buonasera GraphOGLRisorse,
    credevo che (?,?,?,?,?) stasse a significare "ora mettici tu i tuoi campi".
    Comunque ora proverò così, strana sintassi pero !!!
    Grazie, faccio sapere.
    mzanella likes this.

  23. #23
    leonardomoretti non è connesso Utente giovane
    Data registrazione
    22-07-2020
    Messaggi
    34

    Red face

    Ora è tutto a posto niente errori !!!
    Ricapitolando:
    Codice PHP:
    $query =("INSERT INTO MEASUREMENTS (DATA, TIME, DEVICE, DATA1, DATA2) VALUES (?,?,?,?,?)"); 
    Servono per segnare il posto alle variabili che andremo poi a mettere nello stantement!
    Codice PHP:
     $stmt->bind_param"iisss"$date$time$device$data1$data2); 
    Ora ho capito grazie ancora a tutti e due.
    Ultima modifica di leonardomoretti : 04-08-2020 alle ore 20.01.44

  24. #24
    GraphOGLRisorse è connesso ora AlterGuru
    Data registrazione
    14-02-2015
    Messaggi
    1,098

    Predefinito

    Era giusto come aveva in precedenza fatto presente mzanella, nella stringa della query, le parentesi esterne alle "", sono inutili anche se non creano problemi, e possono essere tolte. Le avevo lasciate per sbaglio dal codice vecchio quando avevo aggiornato la stringa della query per l'uso con stament. Infatti, nel mio mesaggio precedente, può notare che non sono più presenti.

    Non ho aggiornato il codice con statment che ho messo, togliendo le parentesi superflue, per evitare di poter creare confusione a chi eventualmente leggerrà la doscussione per neccissità analoghe.

    Per toglierle eventuali dubbi per il futuro, in bind_param(), il gruppo di lettere che nel suo caso è "iisss", è pari al umero delle variabili della query, essi stanno a indicare la tipologia di ogni variabile usata nella query.

    i = integer
    d = double
    s = string

    Cordiali saluti.
    Ultima modifica di GraphOGLRisorse : 04-08-2020 alle ore 20.34.35

  25. #25
    leonardomoretti non è connesso Utente giovane
    Data registrazione
    22-07-2020
    Messaggi
    34

    Predefinito

    Buonasera,
    Mi dispiace dover comunicarvi che il codice da voi consigliato ha funzionato solo una volta:

    Codice PHP:
    $query=("INSERT INTO MEASUREMENTS (DATA, TIME, DEVICE, DATA1, DATA2) VALUES (?, ?, ?, ?, ?)"); 
         
        if(
    $stmt $db_connection->prepare($query)) {
        
    $stmt->bind_param("iisss"$date$time$device$data1$data2);
        
    $result $stmt->execute();
        
    $stmt->store_result();
        echo 
    "%d Row inserite.\n"$db_connection->affected_rows;
        
    $stmt->free_result();
        if(
    $stmt->more_results())
        
    $stmt->next_result();
        
    $stmt->close();
        
        echo 
    "Records inserted successfully.";    
        }else{
                echo 
    "ERROR: Could not able to execute $query. " mysqli_error($db_connection);
              } 
    %d Row inserite. -1Records inserted successfully.

    Ma non è vero questo messaggio il db non si riempie !!
    Ho provato il vecchio codice di qualche giorno fa e lavora egregiamente:
    Codice PHP:
    $query="INSERT INTO MEASUREMENTS (DATA, TIME, DEVICE, DATA1, DATA2) VALUES ('$date', '$time', '$device', '$data1', '$data2')";
        if(
    mysqli_query($db_connection$query)){
            echo 
    "Records inserted successfully.";
        } else{
                echo 
    "ERROR: Could not able to execute $query. " mysqli_error($db_connection);
              } 
    Records inserted successfully.
    Attendo Vs suggerimenti Grazie.
    Ultima modifica di leonardomoretti : 04-08-2020 alle ore 20.46.57

  26. #26
    GraphOGLRisorse è connesso ora AlterGuru
    Data registrazione
    14-02-2015
    Messaggi
    1,098

    Predefinito

    Tolga le parentesi superflue dalla stringa della query.

    Comunque nel messaggio dice righe inserite -1. Mentre da quello che aveva riportato in precedenza, le righe inserite risutavano a 1.

    Ha apportato modifiche dopo la prima volta che ha funzionato?

    Cordiali saluti.

  27. #27
    GraphOGLRisorse è connesso ora AlterGuru
    Data registrazione
    14-02-2015
    Messaggi
    1,098

    Predefinito

    Apporti queste modifiche:
    Codice PHP:
    $test $stmt->bind_param("iisss"$date$time$device$data1$data2);
    var_dump($test$date$time$device$data1$data2); 
    Quindi riporti qui il risultato del test.

    Cordiali saluti.
    Ultima modifica di GraphOGLRisorse : 04-08-2020 alle ore 22.47.09

  28. #28
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,696

    Predefinito

    Al momento il codice controlla solo se il prepared statement è stato istanziato correttamente. Non ci sono controlli né sul binding, né sulla riuscita dell'operazione. Se li vuoi basta aggiungerli .

    C'è anche da considerare che recuperare il numero di righe interessate diventa superfluo: per come è costruita la query, il numero di righe interessate è sempre 1 quando l'operazione ha successo, 0 altrimenti. In caso di fallimento non ha molto senso proseguire, si incappa solo in errori come quelli che stai vedendo ora, tanto vale usare un die o sollevare un'eccezione. Infine, trattandosi di un inserimento, la query non restituirà un oggetto result, bensì true, quindi chiamate come more_results, next_results e free_result non hanno alcun effetto. Già che ci siamo, meglio essere consistenti e usare l'interfaccia a oggetti anche per myqli->error.

    Diamo una sfoltita al dead code?
    Codice PHP:
    <?php
    ERROR_REPORTING
    (E_ALL);

    // Effettua la connessione alla base di dati
    $USERNAME "leonardomoretti";
    $PASSWORD null;
    $DBSERVER"localhost";
    $DBNAME "my_leonardomoretti";
    if(!(
    $db_connection = new mysqli($DBSERVER$USERNAME$PASSWORD$DBNAME))) {
       die(
    'Connect Error (' $db_connection->connect_errno ') '$db_connection->connect_error);
    }

    // Legge i dati della richiesta
    date_default_timezone_set('Europe/Warsaw');
    $data explode(','$_REQUEST['data']);
    $date date("Y-m-d");
    $time date("H:i:s");
    $device $data[0];
    $data1 $data[1];
    $data2 $data[2];

    // Inserisce i dati nella base di dati
    $query "INSERT INTO MEASUREMENTS (DATA, TIME, DEVICE, DATA1, DATA2) VALUES (?, ?, ?, ?, ?)"

    if ((
    $stmt $db_connection->prepare($query)) === false) {
        echo 
    "0 Rows inserite.\n";
        die(
    "ERROR: Could not to prepare $query. " $db_connection->error);
    }
    if (
    $stmt->bind_param("iisss"$date$time$device$data1$data2) === false) {
        echo 
    "0 Rows inserite.\n";
        die(
    "ERROR: Could not bind params: $date$time$device$data1$data2. " $db_connection->error);
    }
    if (
    $stmt->execute() === false) {
        echo 
    "0 Rows inserite.\n";
        die(
    "ERROR: Could not execute query. " $db_connection->error);
    }
    echo 
    "1 Row inserite.\n";
    echo 
    "Records inserted successfully.";
    Ultima modifica di mzanella : 05-08-2020 alle ore 15.40.14

    I suggerimenti che do più spesso:


  29. #29
    leonardomoretti non è connesso Utente giovane
    Data registrazione
    22-07-2020
    Messaggi
    34

    Predefinito

    buongiorno,
    Ecco il responso del test:
    bool(true) string(10) "2020-08-05" string(8) "11:12:03" string(8) "DEVICE01" string(4) "30.0" string(2) "65" %d Row inserite. -1Records inserted successfully.]
    sul codice:
    Codice PHP:
    <?php
    /*mysqli e pdo library*/

    error_reporting(E_ALL);

    $USERNAME "leonardomoretti";
    $PASSWORD null;
    $DBSERVER"localhost";
    $DBNAME "my_leonardomoretti";

    if(!(
    $db_connection = new mysqli($DBSERVER$USERNAME$PASSWORD$DBNAME)))
       die(
    'Connect Error (' $db_connection->connect_errno ') '$db_connection->connect_error);

    if(!(
    $db_selection $db_connection->select_db($DBNAME)))
       die (
    "Errore nella selezione del DB.");


        
    $vdata$_REQUEST['data'];
        
        
    $string explode(',',$vdata); /*SEPARA IN PARORE LA STRINGA INTERA SEPARATA DAL CARATTERE "," E LE METTE NEL VETTORE */
        
        
    date_default_timezone_set('Europe/Warsaw');
        
    $date=date ("Y-m-d");
        
    $time=date("H:i:s");
        
    /*$progressive=(int)$string[0];*/
        
    $device=$string[0];
        
    $data1=$string[1];
        
    $data2=$string[2];
        
        
    $query="INSERT INTO MEASUREMENTS (DATA, TIME, DEVICE, DATA1, DATA2) VALUES (?, ?, ?, ?, ?)"
         
        if(
    $stmt $db_connection->prepare($query)) {
        
    $stmt->bind_param("iisss"$date$time$device$data1$data2);
        
    $test $stmt->bind_param("iisss"$date$time$device$data1$data2);
        
    var_dump($test$date$time$device$data1$data2); 
        
        
    $result $stmt->execute();
        
    $stmt->store_result();
        echo 
    "%d Row inserite.\n"$db_connection->affected_rows;
        
    $stmt->free_result();
        if(
    $stmt->more_results())
        
    $stmt->next_result();
        
    $stmt->close();
        
        echo 
    "Records inserted successfully.";    
        }else{
                echo 
    "ERROR: Could not able to execute $query. " mysqli_error($db_connection);
              } 
    $db_connection->close();
    ?>
    Attendo notizie , grazie.
    Ultima modifica di leonardomoretti : 05-08-2020 alle ore 12.18.30

  30. #30
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,696

    Predefinito

    A parte il doppio binding dovuto al test difficile notare qualcosa di strano. Dovresti controllare quanto restituito da mysqli_query. Ho aggiornato il codice del messaggio precedente con alcune migliorie, tra cui i controlli.

    Probabilmente hai qualche vincolo di univocità sulla tabella che verrebbe violato, o qualche problema con i tipi delle colonne.

    I suggerimenti che do più spesso:


Pagina 1 di 2 12 UltimoUltimo

Regole di scrittura

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