Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    [Mysql]zero come int non funziona?

    ciao a tutti,
    faccio una query insert tipo

    INSERT INTO `f_tb_card` (
    `id_card` ,
    `id_rapp` ,
    `id_player` ,
    `yellow_card` ,
    `red_card` ,
    `day_card` ,
    `giornata` ,
    `categoria` ,
    `stagione` ,
    `note` )
    VALUES (
    '',
    '[[id_rapp_player]]',
    '[[id_player]]',
    '[[yellow_card]]',
    '[[red_card]]',
    '[[day_card]]',
    '33',
    'A',
    '2005/2006',
    '')

    dove i valori tra le parentesi quadre [[valore]] vengono sotituiti da una variabile nel codice. la struttura della tabella è

    CREATE TABLE `f_tb_card` (
    `id_card` int(9) NOT NULL auto_increment,
    `id_rapp` int(5) NOT NULL default '0',
    `id_player` int(8) NOT NULL default '0',
    `yellow_card` int(1) default '0',
    `red_card` int(1) NOT NULL default '0',
    `day_card` int(2) NOT NULL default '0',
    `giornata` int(2) NOT NULL default '0',
    `categoria` char(1) NOT NULL default '',
    `stagione` varchar(12) NOT NULL default '',
    `note` text,
    PRIMARY KEY (`id_card`)
    ) TYPE=MyISAM;

    se passo zero come valore di red_card o yellow_card il programma mi dice che c'è un' errore di sintassi nell'sql..ho provato a passare valori diversi da zero e funziona!

    qualcuno mi dice il perchè non digerisce gli zero?

  2. #2
    nn so, hai provato senza apici?

  3. #3
    si..con e senza apici..acnhe cambiando da int a char o varchar il campo della tabella

    se il valore inserito è zero, non lo digerisce.la query la richiama da un file, l'unica possibilità per fargli digerire lo zero e se viene inserito direttamente nel file sql, ma se gli viene passato dalla variabile non lo digerisce.se la variabile è 1 però lo digerisce e tutto funziona!

    non capisco perchè se inserisco un numero maggiore di zero funzioni!

  4. #4
    una volta caricato file e sostituito le variabili ecco cose vedo come query

    query_06.sql
    INSERT INTO `f_tb_card` ( `id_card` , `id_rapp` , `id_player` , `yellow_card` , `red_card` , `day_card` , `giornata` , `categoria` , `stagione` , `note` ) VALUES ( '', '1', '1', '1', '0', '0', '33', 'A', '2005/2006', '')
    *****-----******1

    You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '1' at line 1

    come vedete sostituisce uno zero

    la varaibile è $var["red_card"]=0;
    se metto a 1 funziona!se lo zero lo scrivo direttamente nel file sql funziona!


  5. #5
    nessuno ha idea?

  6. #6
    Originariamente inviato da lbottoni
    nessuno ha idea?
    Se l'errore avviene con le variabili e non con i valori espliciti prova a postare la query con le variabili e come queste variabili sono valorizzate.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    la query è questa:


    INSERT INTO `f_tb_card` (
    `id_card` ,
    `id_rapp` ,
    `id_player` ,
    `yellow_card` ,
    `red_card` ,
    `day_card` ,
    `giornata` ,
    `categoria` ,
    `stagione` ,
    `note` )
    VALUES (
    '',
    '[[id_rapp_player]]',
    '[[id_player]]',
    '[[yellow_card]]',
    '[[red_card]]',
    '[[day_card]]',
    '33',
    'A',
    '2005/2006',
    '')

    le variabili sono:

    $var["id_rapp_player"] = 1;
    $var["id_player"] = 1;
    $var["yellow_card"] = 1;
    $var["red_card"] = 0;
    $var["day_card"] = 0;


    uso una funzione che gli passo solo il file sql da caricare (contiene la query sopra citata) e sostituisce tutti i valori tra [[ e ]] con le $var corrispondenti.

    la funzione la trovi qui

    http://forum.html.it/forum/showthrea...hreadid=878085

    la tabella la crei così

    CREATE TABLE `f_tb_card` (
    `id_card` int(9) NOT NULL auto_increment,
    `id_rapp` int(5) NOT NULL default '0',
    `id_player` int(8) NOT NULL default '0',
    `yellow_card` int(1) default '0',
    `red_card` int(1) NOT NULL default '0',
    `day_card` int(2) NOT NULL default '0',
    `giornata` int(2) NOT NULL default '0',
    `categoria` char(1) NOT NULL default '',
    `stagione` varchar(12) NOT NULL default '',
    `note` text,
    PRIMARY KEY (`id_card`)
    ) TYPE=MyISAM;

  8. #8
    Non credo sia un problema di SQL. Fai una prova immettendo direttamente le variabili senza usare la funzione. La segnalazione di errore non indica quale '1' provoca l'errore (e non zero).

    Penso che il problema sia nella lettura del file di testo. Con file() al fondo delle righe rimane il carattere new line e/o return.

    Prova a mettere nella funzione un trim() alla variabile che estrai con foreach . Puo' essere che in presenza di un \r\n la funzione substr() sbagli la rimozione dei caratteri di coda.
    codice:
    foreach($sql as $k=>$v)
                {
    			$n = trim($v);

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  9. #9

    Re: [Mysql]zero come int non funziona?

    Originariamente inviato da lbottoni
    CREATE TABLE `f_tb_card` (
    `id_card` int(9) NOT NULL auto_increment,
    `id_rapp` int(5) NOT NULL default '0',
    `id_player` int(8) NOT NULL default '0',
    `yellow_card` int(1) default '0',
    `red_card` int(1) NOT NULL default '0',
    `day_card` int(2) NOT NULL default '0',
    `giornata` int(2) NOT NULL default '0',
    `categoria` char(1) NOT NULL default '',
    `stagione` varchar(12) NOT NULL default '',
    `note` text,
    PRIMARY KEY (`id_card`)
    ) TYPE=MyISAM;
    ciao ... so che non c'entra molto ma se ti servono valori inferiori a 3 cifre usa TINYINT e non INT. Mentre per int(5) usa uno SMALLINT e per INT(8) un MEDIUMINT. Inoltre ti sconsiglio di usare un int(9) dato che usa lo stesso spazio su disco e in memoria di un int(10)
    Inoltre tutti i vaclori numerici sono SIGNED ... se non ti servono i valori negativi passa tutti i valori a UNSIGNED

    ----

    tieni conto che lo zero è considerato anche come false o come vuoto (se ad es fai echo ((int)""); ti stamperà zero )

  10. #10
    Il discorso del campo INT e' infatti una cosa che volevo dire pure io, ma non volemo mettere troppo acqua a bollire, anche perche' se cambiando il tipo di campo metti caso che anche altro cambi e funzioni si vada ad addebitare il problema al tipo di campo .

    Per precisare quanto detto giustamente da daniele bisogna dire che i campi TINYINT, SMALLINT, MEDIUMINT, INT e BIGINT sono formati con lunghezza di campo prefissata. Rispettivamente occupano:
    codice:
    TINYINT   1 byte
    SMALLINT  2 byte
    MEDIUMINT 3 byte
    INT       4 byte
    BIGINT    8 byte
    Il numerello che si mette tra parentesi e' il numero dei digit da visualizzare, che alla fin della fiera serve solo se si usa UNSIGNED ZEROFILL perche' se si supera la lunghezza impostata MySQL visualizza tutti i numeri inseriti fino alla max capacita' del campo.

    Nel caso attuale essendo il campo di tipo BOOL che mysql non ha, il manuale suggerisce espressamente di usare il campo TINYINT(1) con 0/1 in funzione di falso/vero .

    Con questo uso (campo BOOL) un errore di configurazione c'e' (al di la del tipo di campo) ed e' il campo "yellow_card" definito come NULL invece che NOT NULL. Se si vuole un funzione tipo BOOLEANA un campo non puo' mai essere NULL. NULL non e' = FALSE.



    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.