Pagina 2 di 2 PrimoPrimo 12
Visualizzazione risultati 31 fino 37 di 37
Like Tree3Likes

Discussione: codice PDO php per contare i record tabella mysql

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

    Predefinito

    Buongiorno,
    Ho provato il codice suggerito nel post sopra:
    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[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(); */ // 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 ($test =$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); } var_dump($test, $date, $time, $device, $data1, $data2); if ($stmt->execute() === false) { echo "0 Rows inserite.\n"; die("ERROR: Could not bind execute query. " . $db_connection->error); }echo "1 Row inserite.\n";echo "Records inserted successfully.";$stmt->close(); $db_connection->close();?>
    mi rilascia il seguente errore:
    non ho capito perché mi dice "Incorrect date value: '2020' for column 'DATA' at row 1" quando 'DATA" dovrebbe essere in questo formato: Anno-Mese-giorno invece riporta solo l'anno. ho già controllato la variabile $date=date ("Y-m-d"); con echo $date ed è giusta (anno,mese,giorno) come la vuole nel DB.
    Ha qualche altro suggerimento?

    bool(false) string(10) "2020-08-05" string(8) "12:47:04" string(8) "DEVICE01" string(4) "30.0" string(2) "55" 0 Rows inserite. ERROR: Could not bind execute query. Incorrect date value: '2020' for column 'DATA' at row 1


  2. #32
    GraphOGLRisorse non è connesso AlterGuru 2500
    Data registrazione
    14-02-2015
    Messaggi
    4,252

    Predefinito

    Il codice le è venuto in parte tutto su una riga e risulta un pò cofuso, comunque mi sembra che ci sia commentata la stringa della query.

    Inoltre, ha commentato buna parte del codice statment è ha lascaito bind_param(). La funzione bind_param(), fa parte della struttura a oggetti usata per statment, quindi serve anche il resto.

    Riprovi usando il codice impostato correttamente.

    Cordiali saluti.
    Ultima modifica di GraphOGLRisorse : 05-08-2020 alle ore 14.07.06

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

    Predefinito

    Dopo lo correggo, grazie.

  4. #34
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Il messaggio d'errore è chiaro, il binding fallisce perché date non è nel formato corretto. In effetti il bind su una colonna di tipo DATE va effettuato come stringa, non intero, e lo stesso per TIME.
    Quindi questo
    Codice PHP:
    $test = $stmt->bind_param("iisss", $date, $time, $device, $data1, $data2);
    va modificato in
    Codice PHP:
    $test = $stmt->bind_param("sssss", $date, $time, $device, $data1, $data2);
    GraphOGLRisorse likes this.

    I suggerimenti che do più spesso:


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

    Thumbs up

    Buonasera,

    Il codice ora funziona bene ho fatto 2 prove ed adesso scrive nel DB

    QUESTO E' IL DEBUG:
    bool(false) string(10) "2020-08-05" string(8) "17:26:28" string(7) "DEVICE1" string(2) "35" string(2) "55" 1 Row inserite. Records inserted successfully.
    IL CODICE FINALE ESATTO E IN SEGUENTE:
    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];

    // 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 (
    $test = $stmt->bind_param("sssss", $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);
    }

    var_dump($test, $date, $time, $device, $data1, $data2);
    if (
    $stmt->execute() === false) {
    echo
    "0 Rows inserite.\n";
    die(
    "ERROR: Could not bind execute query. " . $db_connection->error);
    }
    echo
    "1 Row inserite.\n";
    echo
    "Records inserted successfully.";
    $stmt->close();

    $db_connection->close();
    ?>
    Avreste delle dispense che spiegano bene quando usare sssss oppure iisss, e la nuova libreria cha abbiamo usato per connetterci e scrivere sul DB.
    Ho capito che quando si usano della variabili di tipo data e ora nel binding non va usato double la string ma voglio anche capire bene come viene fuori questa opzione "sssss" piuttosto che "iisss" !
    Per caso siccome ho 5 campi da inserire nel DB uso 5 volte l'opzione s? (string), se ne avessi avuti 3 soli di campi avrei usato nel binding solo sss(se si trattava di stringe) oppure iii(se si trattava di 3 interi).

    Grazie ancora per la Vs disponibilità.

  6. #36
    GraphOGLRisorse non è connesso AlterGuru 2500
    Data registrazione
    14-02-2015
    Messaggi
    4,252

    Predefinito

    Mi scuso per il mio errore.

    In bindig, il gruppo di lettere è pari alle variabili usate nella stringa della queri, che sono sostituite dai segna posti "?". Tale parametro in bindig, stabilisce il tipo delle variabili usate.

    Cosa usare dipende dal tipo di variabili usate. Come negli esempi che ha messo lei a fine messaggio.

    Se si hanno ad esmpio variabili; 2 integer, 2 double e 1 string, avremo così:
    Codice PHP:
    $stmt = $mysqli->prepare("INSERT INTO MEASUREMENTS (val1, val2, val3, val4, val5) VALUES (?, ?, ?, ?, ?)");
    $stmt->bind_param("iidds", $data1, $data2, $data3, $data4, $data5) === false)
    Cordiali saluti.
    Ultima modifica di GraphOGLRisorse : 05-08-2020 alle ore 18.22.14

  7. #37
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Puoi fare riferimento a mysqli_stmt::bind_param, e in generale alla documentazione di PHP, di solito spiega tutto o quasi.

    Sfortunatamente non è molto chiara sulla "lettera" da usare per le colonne di tipo DATE, ma come regola generale si usa il tipo più specifico tra quelli disponibili: se hai un numero intero puoi usare i, per un decimale in virgola fissa o mobile d, per un BLOB b, per tutto il resto, date incluse s, poiché qualsiasi informazione è rappresentabile come stringa.

    Per caso siccome ho 5 campi da inserire nel DB uso 5 volte l'opzione s? (string), se ne avessi avuti 3 soli di campi avrei usato nel binding solo sss(se si trattava di stringe) oppure iii(se si trattava di 3 interi).
    Esatto, con quel parametro si indica quanti e di che tipo saranno i parametri successivi. Se stai per passare 5 parametri come stringhe userai 'sssss', se stai per passare due interi, un decimale, una stringa e di nuovo tre interi userai 'iidsiii', e così via. Il numero di parametri che passi dovrà corrispondere sia al numero di "lettere" che hai usato, sia al numero di punti interrogativi nella query. Personalmente la trovo una sintassi un po' strana, ma questa è... . PDO per esempio ha una gestione piuttosto diversa e, a mio parere, più semplice.

    I suggerimenti che do più spesso:


Pagina 2 di 2 PrimoPrimo 12

Regole di scrittura

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