• User Newbie

    Risposta query errata

    salve ragazzi!
    domanda velocissima:
    stò facendo un sito di gestione magazzino in php/mysql!
    la domanda è questa
    come mai alcune query mi riportano come risultato "Resource id #5", quando se le stesse identiche query le lancio dal MysqlQueryBrowser, riportano risultati corretti!?
    suppongo sia un errore in fase di creazione php...anche perchè direttamente sul db mi danno i giusti risultati!
    ah, notavo che l'errore me lo da quando faccio ricerche sulle chiavi della tabelle...che fare!?


  • Bannato User Attivo

    Bada bene che non si tratta di un errore ma dell'identificativo della risorsa restituito da mysql_query().

    Questa funzione, eseguendo una SELECT, SHOW, EXPLAIN o DESCRIBE, restituisce FALSE se la query stessa fallisce oppure, come nel tuo caso, un Resource id #...

    Niente di sbagliato.

    mysql_query() restituirà, invece, TRUE/FALSE per query diverse da quelle sopra indicate.


  • User Newbie

    @Portaile84 said:

    Bada bene che non si tratta di un errore ma dell'identificativo della risorsa restituito da mysql_query().

    Questa funzione, eseguendo una SELECT, SHOW, EXPLAIN o DESCRIBE, restituisce FALSE se la query stessa fallisce oppure, come nel tuo caso, un Resource id #...

    Niente di sbagliato.

    mysql_query() restituirà, invece, TRUE/FALSE per query diverse da quelle sopra indicate.
    mmm ma comunque mi da una risposta errata, non tanto nella forma quanto nel contenuto, dato che l'id che mi aspetto non è il 5 ma l'1...ed infatti sul mysqlquerybrowser mi ritorna 1 come risultato....il mio dubbio stà tutto lì!


  • Bannato User Attivo

    Scrivi la query che usi?


  • User Newbie

    $query="SELECT MAX(ID_ORDINE) FROM TAB_ORDINI WHERE YEAR(DATA_EMISSIONE)=".$a;

    dove naturalmente $a è una variabile php che prendo da una pagina precedente con il metodo $_POST

    successivamente
    $new_id=mysql_query($query, $db)+1;
    $new_id=$a.$new_id;

    per la generazione della chiave che mi serve


  • Bannato User Attivo

    Premesso questo:

    Dal 1901 al 2155 si usano 4 cifre.
    Da 00 a 69 sarà riconosciuto 2000-2069.
    Da 70 a 99: 1970-1999.

    Così ricordo io... Ora sinceramente non ricordo se questa funzione YEAR() riconosce il valore in una stringa del tipo gg-mm-yyyy o simili, oppure funziona solo se la cella contiene solo l'anno... mi vien da pensare che sia solo quest'ultimo. Ma non metto la mano sul fuoco.

    Hai controllato prima questa funzione?
    Come vengono memorizzati i dati dentro la cella DATA_EMISSIONE?


  • User Newbie

    allora...la funzione YEAR() dovrebbe restiturimi il valore dell'anno di un campo DATE...
    il mio problema è ancora più alla base!
    le tabelle sono vuote, quindi il MAX(ID_FORNITORI) dovrebbe essere 0?!
    o sbaglio!?
    per quale assurdo motivo mi ritorna 5!?


  • Bannato User Attivo

    Mi sa che qui si fa confusione.

    Ti spiego, almeno così io lo interpreto:

    In PHP le query vanno dichiarate. Dopo che si dichiarano vanno passate a mysql_query che le esegue.

    Il risultato sarà come ho scritto nel mio primo post. Un identificativo di risorsa se la query è corretta ed è una SELECT, SHOW, EXPLAIN o DESCRIBE altrimenti true/false.

    Quindi nel tuo caso, studiando il tuo codice:

    $new_id=mysql_query($query, $db)+1;
    $new_id=$a.$new_id;

    Vado ad interpretarlo così: eseguo la query che nella sintassi è corretta. Quindi mi aspetterò un Resource Id. Questo resource Id lo vuoi incrementare (poi mi spieghi perchè 🙂 ) ad uno.
    Ripeto: Resource Id non è un intero che incrementi o simile... (quindi già qui un errore).

    C'è anche una concatenazione di variabili che non mi spiego.
    $new_id=$a.$new_id;

    L'errore credo sia tutto qui.... parti sbagliando, poi è normale che l'errore te lo porti per tutto lo script che usa quella variabile.

    Piuttosto prova questo codice:

                 $query="SELECT MAX(ID_ORDINE) FROM TAB_ORDINI WHERE YEAR(DATA_EMISSIONE)=".$a;
    

    $result=@mysql_query($query);

    if($new_id=@mysql_num_rows($result) < 1){
    $new_id=1;
    }

    Poi puoi aggiungere anche quella cosa della concatenazione, ma non capisco che sia...


  • User Newbie

    effettivemante non mi sono spiegato bene!
    allora
    ID_ORDINE è chiave primaria di un campo calcolata in questo modo
    le prime 4 cifre sono l'anno di emissione dell'ordine, quello che vien dopo è un progressivo
    quindi come me lo ricavo:
    in $a c'è l'anno dell'ordine, mi cerco l'id più grande con quell'anno, poi di incremento l'id di uno...
    ho provato a lanciare la query
    $query="SELECT MAX(ID_ORDINE) FROM TAB_ORDINI WHERE YEAR(DATA_EMISSIONE)=".$a;
    e a fare l'echo di tutto...e mi dà sempre la stessa risposta....!!!!


  • Bannato User Attivo

    Il php restituisce sempre quello (al momento vedo solo questo io) perchè tu stai andando a lavorare su un identificativo di risorsa...

    Prendila così:

    Dopo che esegui la query, la variabile nella quale memorizzi la query ha una stringa del testo.

    La mia domanda è questa: come fai ad incrementare di una una frase? E' questo che ti sballa tutto. Credo....

    Prova ad usare il codice che ti ho messo io... magari dopo la chiusura dell'if metti un echo e vedi che ti stampa...


  • User Newbie

    RISOLTO!!!!!
    grazie all'ottima consulenza di Portaile84 sono arrivato ad una giusta conclusione!
    usando il seguente codice:

    $result=mysql_query($query, $db);//tra parentesi i parametri (query e db)
    $row = mysql_fetch_array($result);//mi restituisce la riga di risposta della query
    echo $row[NUM];//dove NUM è il campo che voglio stampare della select!

    già che son qui un altra domanda: come faccio a forzare il tipo di una variabile in php ?!
    ovvero se io da una query so che avrò come risposta un intero (tipo per un da COUNT(...) o per un MAX(...)), e poi ci devo fare delle operazioni algebriche sopra, il server php necessita di sapere che sta trattando un intero!?

    esempio buttato li:
    $num = qualcosa raccattato qua e la;
    $num2 = INT($num)+qualcos'altro;

    o mi faccio menate assolutamente inutili(cosa MOLTO probabile)?!


  • Bannato User Attivo

    Sono domande normalissime 🙂
    Me lo chiesi anche i a suo tempo e a suo tempo imparai che:

    Il PHP, a differenza di linguaggi come C, non necessita di controlli sulle variabili.

    Boolean (ovvero booleano): assume valori true/false (ovvero vero/falso).
    Integer (intero): qui non vi è un valori minimo ed uno massimo. Questo dipende infatti dalla piattaforma nella quale viene eseguito lo script. In genere comunque viene messa la soglia del -2^32 +2^32 (fate voi i calcoli :P)
    **Float: **Numeri in virgola mobile
    **String: **Le stringhe.

    Cosa porta questo?

    Che le stringhe diciamo che possono essere "forzate".

    [PHP]<?php

    $stringa="Qui ci sono 5 automobili";

    echo($stringa);

    $stringa[12]=$stringa[12]+1;

    echo("<br />".$stringa);

    ?>[/PHP]

    I due echo restituiranno:

    Qui ci sono 5 automobili
    Qui ci sono 6 automobili

    Cosa ho fatto? Ho definito una stringa, una sequenza di caratteri, e considerato il carattere nel dodicesimo indice l'ho incrementato di una unità.

    Se questo gioco viene eseguito su un Integer, otterremo un errore.