SELECT un INSERT mysql race condition

Sākumlapa Forumi Mājas lapu izstrāde Servera puse (php, java, ruby, perl, python) SELECT un INSERT mysql race condition

Tiek skatīts 3 ierakstu – 1 līdz 3 (no 3 kopumā)
  • Autors
    Ieraksti
  • #159046
    E-500
    Participant

    Ir 3 vaicājumi:

    Code:

    $laiks = $mysqli->query(”SELECT laiks FROM tabula1 WHERE bla bla”);

    if $laiks mazāks kā ZZZ
    {
    Insertojam tabulā2;
    Insertojam tabulā1 jaunu laiku.
    }


    Bet te sanāk race, ja 2 pieprasa $laiks (starp select un insert)? Kā izsargāties, lai neievietotu 2x?

    #303936
    natolv
    Participant

    Uzliec unikālu indexu uz date(vai time vai k’ads Tev vins ir) lauku, un tad ar prepered statementu mauc.

    Piem.

    Code:

    $pdo = new Pdo(”“);
    $pdo->beginTransaction();

    try
    {
    $stmt = $pdo->prepare(”INERT INTO tabula1(laiks) VALUES (:laiks)”);
    $stmt->execute(array(’laiks’ => $jaunaVertiba));
    }
    catch(PDOException $e)
    {
    //ieks $e ir mysql kļūda, jo laukam “laiks” ir unique index, vari izdrukāt $e->getMessage() kļūdu, kuru nevajag, be tā vietā atsaucam izpildi

    $pdo->rollback();
    // paziņojam lietotājam, ka jau ir insertots vai aizņemts
    return ‘kļūda’;
    }
    //savādāk commitojam
    $pdo->commit();

    #303937
    E-500
    Participant

    Baigi labā doma, uzlikt unikālu indexu uz laiku un noķert kļūdu. Un es tik ilgi šito smadzeņoju ar transakcijām un table lockingu.

Tiek skatīts 3 ierakstu – 1 līdz 3 (no 3 kopumā)
  • Jums ir jāpieslēdzas sistēmai, lai varētu komentēt šo tēmu.
Jaunākais portālā