sql >> Databasteknik >  >> RDS >> Mysql

PDO och MySQL UPPDATERING i Foreach Loop

Till att börja med använder du bindParam() som om det är bindValue() , de är ganska olika .

Utan att se var du får dina arrayvärden ifrån är det lite svårare att se vad som händer med säkerhet. Det verkar som att informationen du tillhandahåller sannolikt inte är den kod du använder och har modifierats, särskilt när det gäller foreach-looparna och data_array-variablerna eftersom det du beskriver är ett problem som är vanligt med BindParam så det är antagandet jag ska jobba på. Om så är fallet är det i allmänhet en bra idé att tillhandahålla faktiska kodavsnitt inklusive initiering av de variabler som används och blocken där problemet hittas snarare än bara koden i dessa block.

Här är ett annat svar med varför , se i princip till att du går förbi refererar till värdedelen av din foreach loop eller att du ändrar bindParams till bindValues. Du vill också se till att du använder två separata objekt här istället för ett om du planerar att fortsätta använda den här strukturen eftersom du kör både bindParam() metoder varje gång du anropar execute() .

Så något i stil med, säg, var kodstrukturen inte ändrad (vilket den förmodligen borde vara eftersom allt detta är i loopar och bara Execute ska vara 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();

Ett mer optimalt sätt att göra detta skulle dock vara något i stil med (kom ihåg att detta bara är ett allmänt exempel):

$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. Varför måste vi använda främmande nycklar?

  2. Infoga Python List (JSON eller annat) i MySQL-databasen

  3. Kan plv8 JavaScript-språktillägg anropa tredje parts bibliotek?

  4. Modellera UUID i Hibernate-enhet mot MySQL