MySQL Update некорректно обновляет несколько строк (показаны неудачные «исправления») - PullRequest
0 голосов
/ 30 января 2019

Мой скрипт пытается обновить значения БД, ГДЕ $ system_id имеет определенное значение;проблема в том, что он обновляет значения БД, даже если $ system_id имеет неправильное значение.

Более конкретно: $ g1choice, $ g2choice и $ g3choice обновляются для любой строки, в которой совпадает $ factor, независимо от$ system_id

Что я делаю не так?Спасибо!:)

Ниже: 1) код;2) неудачные попытки исправить код

 //Insert & Update Factor A table
    $page_query = $pdo->query(
        "SELECT sum(task_1) AS task01, sum(task_2) AS task02, sum(task_3) AS task03, rand01
        FROM pages
        GROUP BY rand01"
    );

    while ($row = $page_query->fetch()) {

        $factors = $pdo->prepare(
            "SELECT factor
            FROM factorA
            WHERE factor = ? && system_id = ?"
        );
        $factors->execute([$row['rand01'], $system_id]);

        $count = count($factors->fetchAll());

        if ($count > 0) {
            $pdo->prepare(
                "UPDATE factorA
                SET g1choice = ?, g2choice = ?, g3choice = ?
                WHERE factor = ?"
                /* failed fix: WHERE factor = ? &&  system_id = ?" */  
            )->execute([$row['task01'], $row['task02'], $row['task03'], $row['rand01']]);
                /* failed fix:   )->execute([$row['task01'], $row['task02'], $row['task03'], $row['rand01'],$system_id]); */     
        } else {
            $pdo->prepare(
                "INSERT INTO factorA (system_id, factor, g1choice, g2choice, g3choice)
                VALUES (?,?,?,?,?)"
            )->execute([$system_id, $row['rand01'], $row['task01'], $row['task02'], $row['task03']]);
        }
    }

  /*failed fixes below*/

    //failed fix (1):

     failed fix:
     $page_query = $pdo->prepare(
        "SELECT sum(task_1) AS task01, 
         sum(task_2) AS task02, sum(task_3)       
         AS task03, rand01
        FROM pages 
        WHERE system_id= ?
        GROUP BY rand01"
    );
    $factors->execute([$system_id]);        
            */

  //failed fix (2)
/*
               if ($count > 0) {
            $pdo->prepare(
                "UPDATE factorA
                SET g1choice = ?, g2choice = ?, g3choice = ?    

                was WHERE factor = ?"
/* failed fix: WHERE factor = ? &&  system_id = ?" */             

           )->execute([$row['task01'], $row['task02'], $row['task03'], $row['rand01']]);
    /* failed fix:   )->execute([$row['task01'], $row['task02'], $row['task03'], $row['rand01'],$system_id]); */

    */
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...