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

    Prendere testo tra apici

    ciao!

    io ho questo errore che mi arriva da sql:
    codice:
    SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'Abito donna 111' for key 'articoli_gest_artgest_descrizione_uindex' (SQL: CALL add_articolo_gest(0,Abito donna 111,2,12,19,56,50,22,0,Generico,AI-2021))
    io dovrei prendere solo la parte Abito donna 111.
    quindi il testo tra apice singolo.

    solo che anche dopo c'è un altro testo apice singolo.
    è possibile prendere solo il primo??

  2. #2
    Cioè devi recuperare, dall'errore sql, il valore che ti crea problemi?
    Hum...e se l'errore è di un altro tipo dove non ti riporta un valore che crea problemi?

    Ad ogni modo, la soluzione più semplice è trovare le posizioni degli apici con strstr e recuperare le sottostringhe con substr oppure sempre una combinazione tra strpos e substr ecc ecc
    Ultima modifica di Dascos; 08-03-2022 a 17:33

  3. #3
    Non sarebbe meglio verificare prima l'esistenza della chiave univoca e, nel caso esista già, gestire l'eccezione piuttosto che fare il parsing di un errore SQL a posteriori?

    Comunque:

    codice:
    preg_match('#Integrity constraint violation: 1062 Duplicate entry \'(.*?)\'#si', $error, $matches);

  4. #4
    ciao!

    rispondo ad entrambi.

    prima controllo che tipo di errore sia, in modo da non avere messaggi strani.

    per il controllo dell'articolo, il problema è che un inserimento massivo.
    dal client (angular) arriva un array di articoli non definito (pò essere un elemento come 1000).
    volevo evitare di fare N query.
    è cmq tutto dentro ad una transaction, quindi in caso di errori tutti i dati già inseriti vengono cancellati.

    da un'altra parte, dove inserisco un solo articolo, faccio prima il controllo che dici tu!
    se però mi dici che è cmq meglio fare N query, lo faccio anche qui!

  5. #5

  6. #6
    ah tu dici di prendere tutti i valori dell'array json che mi viene passato.
    costruire la query con IN, e verificare il risultato.
    se mi trova qualcosa mando un messaggio di errore.
    sennò scorro l'array e faccio le insert.

    qualcosa del genere??

  7. #7
    ancora un passo indietro: se tra 100 articoli solo 2 sono bacati, gli altri 98 li inserisci oppure non inserisci niente del tutto?

  8. #8
    ciao!

    non devono essere inseriti record se uno va in errore.
    infatti sto usando le transactions di laravel per evitare questo.
    quando va in errore fa la rollback.

  9. #9
    ok, quindi metterai l'errore nei log e poi lo potrai ispezionare; per quale motivo vuoi automatizzare questa ispezione?

  10. #10
    no aspetta non ho parlato di log.

    ricomincio.
    dalla pagina web, creata con angular, creano un nuovo ordine a fornitore aggiungendo gli articoli (che possono essere N).
    tutti questi dati vengono inviati in formato JSON al server.
    se mettono il nome di un articolo già esistente, devo inviare l'errore indicando quale articolo già esiste.
    questo errore compare all'utente tramite finestra modale.
    ovviamente non devo fare l'inserimento di tutti gli altri.

    così ho messo tutto dentro ad una transaction, in modo da fare la rollback in fase di errore.

    ora, come ho fatto adesso funziona, ma visualizzare l'errore in quella maniera non è bello.
    quindi:
    - potrei fare un query di controllo prima di fare l'inserimento inviando gli articoli già esistenti (come mi è stato suggerito prima) in modo che l'utente possa correggere eventuali errori
    - faccio come sto facendo adesso, ripulendo la stringa di errore

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.