Mysql
 sql >> база данни >  >> RDS >> Mysql

PDO и MySQL АКТУАЛИЗАЦИЯ в Foreach Loop

Като за начало използвате bindParam() като това е bindValue() , те са съвсем различни .

Без да виждате откъде получавате стойностите на масива си, е малко по-трудно да видите какво се случва със сигурност. Изглежда, че информацията, която предоставяте, вероятно всъщност не е кодът, който използвате, и е била модифицирана, особено по отношение на циклите foreach и променливите data_array, тъй като това, което описвате, е често срещан проблем с BindParam, така че това е моето предположение ще работи върху. Ако случаят е такъв, като цяло е добра идея да предоставите действителни кодови фрагменти, включително инициализацията на използваните променливи и блоковете, където е открит проблемът, а не само кода в тези блокове.

Ето още един отговор защо , основно се уверете, че предавате чрез препратка стойностната част на вашия цикъл foreach или че променяте bindParams на bindValues. Също така ще искате да се уверите, че използвате два отделни обекта тук вместо един, ако планирате да продължите да използвате тази структура, тъй като изпълнявате и двата bindParam() методи всеки път, когато извиквате execute() .

Така че нещо подобно, да речем, дали структурата на кода не е променена (което вероятно би трябвало да бъде, тъй като всичко това е в цикли и само Execute трябва да бъде в цикъл):

$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();

По-оптимален начин да направите това обаче би бил нещо подобно (имайте предвид, че това е само общ пример):

$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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Само схема mysqldump, актуализиране на схемата без изпускане

  2. Синтактична грешка на SQL, номер, дата/час

  3. PHP код за вмъкване на стойност в квадратчето за отметка в конкретна колона на mysql с форма за избор

  4. Уеб приложението spring-boot губи възможността да се свързва с MySQL / RDS след известно време

  5. MySql заявка за извличане на стойността на атрибута на елемента на xml