sql >> Database teknologi >  >> RDS >> Mysql

PDO og MySQL OPDATERING i Foreach Loop

Til at begynde med bruger du bindParam() som om det er bindValue() , de er helt forskellige .

Uden at se, hvor du får dine array-værdier fra, er det lidt sværere at se, hvad der sker med sikkerhed. Det ser ud til, at de oplysninger, du giver, sandsynligvis ikke er den kode, du bruger, og er blevet ændret, især med hensyn til foreach-løkkerne og data_array-variablerne, da det, du beskriver, er et almindeligt problem med BindParam, så det er antagelsen, som jeg vil arbejde på. Hvis det er tilfældet, er det generelt en god idé at levere faktiske kodestykker, herunder initialiseringen af ​​de anvendte variabler og de blokke, hvor problemet er fundet, i stedet for blot koden i disse blokke.

Her er endnu et svar med hvorfor , dybest set sørg for, at du passerer ved at henvise til værdidelen af ​​din foreach-løkke eller at du ændrer bindParams til bindValues. Du vil også gerne sikre dig, at du bruger to separate objekter her i stedet for ét, hvis du planlægger at fortsætte med at bruge denne struktur, da du kører både bindParam() metoder, hver gang du kalder execute() .

Så noget som f.eks. var kodestrukturen ikke ændret (hvilket det nok burde være, da det hele er i loops og kun Execute skal være i en loop):

$set_data1 = "UPDATE data_table
          SET data_status = 'PROCESSED' 
          WHERE data_id = :data_id1";

$stmt = $db->prepare($set_data1);

$stmt->bindValue(':data_id1', $data_array1['data_id'], PDO::PARAM_INT);

$stmt->execute();

$set_data2 = "UPDATE data_table
              SET data_status = 'PENDING'
              WHERE data_id = :data_id2";

$stmt2 = $db->prepare($set_data2);

$stmt2->bindValue(':data_id2', $data_array2['data_id'], PDO::PARAM_INT);

$stmt2->execute();

En mere optimal måde at gøre dette på ville dog være noget i stil med (husk på, at dette kun er et generelt eksempel):

$set_data = "UPDATE data_table
          SET data_status = :data_status 
          WHERE data_id = :data_id";

$data_array = array( array('data_status' => $dataStatus1, 'data_id' => $dataId), array('data_status' => $dataStatus2, 'data_id' => $dataId2) ); 
/* this is just to represent a multidimensional array (or a multidimensional object) containing the data status and the data id which should be handled and decided before you pass them into a loop. */

$stmt = $db->prepare($set_data);

$data_status = null;
$data_id = null;

$stmt->bindParam(':data_status', $data_status);
$stmt->bindParam(':data_id', $data_id);

foreach( $data_array as $name => $val ) {
    $data_status = $val['data_status'];
    $data_id = $val['data_id'];
    $stmt->execute()';
}


  1. OracleCommand timeout

  2. Hvordan tilføjer man en primær nøgle til en MySQL-tabel?

  3. java.net.SocketException:Ødelagt rør

  4. Sådan øges maksimale forbindelser i PostgreSQL