Visualizzazione risultati 1 fino 5 di 5

Discussione: mysql (affected_rows)

  1. #1
    Guest

    Predefinito mysql (affected_rows)

    Salve,

    Vi scrivo per avere un piccolo aiuto da voi che sicuramente di mysql ne capite molto di più. Sto per creare un mio piccolo blog personale, dove in amministrazione ho creato un form per inserire nuove categorie su cui poter categorizzare i miei articoli. la tabella relativa a tali sezioni è semplicemente strutturata con un campo nome, e un campo sub dove ovviamente andrò a sistemare la lista delle sottosezioni separati da virgole. in questo modo mi verrà facile prelevare le subcategorie una per una per creare l'apposita barra di navigazione (un bell'explode in corrispondenza della virgola e sono a cavallo).

    Ora però il problema mi sorge nel momento in cui devo popolare il database con i dati.

    Come detto prima, ho creato un form con i campi nome e sub, e vorrei che l sistema funzionasse in questo modo: Se è presente la categoria madre, allora aggiorno il campo sub, altrimenti inserisco una nuova riga. Il codice da me scritto è questo:
    Codice PHP:
    $sql = mysql_query("UPDATE categorie SET sub = CONCAT(LOWER(sub), ',$sub') WHERE nome LIKE '$nome'");
    if (
    mysql_affected_rows($sql) == 0) {
    $result = mysql_query("INSERT INTO categorie (nome, sub) VALUES ('$nome', '$sub')");

    echo
    "<p>Categoria inserita</p>";
    }

    else {
    echo
    "<p>Categoria aggiornata</p>";
    }
    Solo che mysql_affected_rows mi sa proprio che mi segnala che le righe coinvolte sono uguali a zero anche quando in realtà il nome della categoria esiste già e quindi si va ad aggiornare la riga esistente.

    Infatti quando provo ad inserire dei contenuti non esistenti va tutto bene, però quando vado ad inserire delle subcategorie non esistenti in una categoria già esistente, si aggiorna la riga interessata però il sistema va avanti andando ad inserire una nuova riga con gli stessi parametri.

    Come posso agire?
    Ultima modifica di javascripter : 02-08-2011 alle ore 18.31.32 Motivo: +[php]

  2. #2
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Non mi convince il modo in cui effettui il controllo sul campo nome, fatto con LIKE. Prova con la comparazione diretta ( = ): nome = '$nome'.
    Inoltre, potresti ottenere lo stesso risultato utilizzando una sola query impostando un campo come chiave primaria e INSERT INTO ... ON DUPLICATE KEY UPDATE.

  3. #3
    Guest

    Predefinito

    Grazie mille, anch'io avevo un problema del genere ed ho risolto con la chicca da te segnalata!

    La verità è che sono pieno di buona volontà ma ho scarse conoscenze sulle funzioni e gli statement di php e mysql, quindi cerco di ottenere delle soluzioni in base alle mie conoscenze invece di utilizzare metodi che da subito mi aiuterebbero ad arrivare alla soluzione.

    Grazie ancora

  4. #4
    Guest

    Predefinito

    Grazie javascripter per la risposta ma io ho ancora alcuni problemi...
    con ON DUPLICATE KEY risolvo il problema appunto delle righe duplicate, però non saprei come gestire il controllo dell'avvenuto inserimento con relativo messaggio!

  5. #5
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Un modo non proprio ortodosso ci sarebbe, ed è (parzialmente) descritto nella stessa documentazione:
    With ON DUPLICATE KEY UPDATE, the affected-rows value per row is 1 if the row is inserted as a new row and 2 if an existing row is updated.
    In altre parole, se una successiva chiamata a mysql_affected_rows() ti restituisce 1, è avvenuto un inserimento, se invece vale 2 è avvenuto un aggiornamento.

    Stammi bene...
    Ultima modifica di dementialsite : 03-08-2011 alle ore 11.49.58
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

Regole di scrittura

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