Почему возникает ошибка при попытке выполнить запрос по R :: exec из RedBeanPHP? - PullRequest
0 голосов
/ 12 мая 2019

У меня есть код:

        $done_tasks = R::getCol('SELECT count(*) FROM tasks WHERE `status` = "done" AND id IN
        (SELECT task_id FROM tasksemployess WHERE employee_id = ?)', array($_SESSION['employee']['id']));

        $failed_tasks = R::getCol('SELECT count(*) FROM tasks WHERE `status` = "failed" AND id IN
        (SELECT task_id FROM tasksemployess WHERE employee_id = ?)', array($_SESSION['employee']['id']));

        $process_tasks = R::getCol('SELECT count(*) FROM tasks WHERE `status` = "in_process" 
        OR `status` = "cheking" OR `status` = "remaking" AND id IN
        (SELECT task_id FROM tasksemployess WHERE employee_id = ?)', array($_SESSION['employee']['id']));

        $avg_mark = R::getCol('SELECT avg(mark) FROM tasks WHERE id IN
        (SELECT task_id FROM tasksemployess WHERE employee_id = ?)', array($_SESSION['employee']['id']));

        R::exec('UPDATE FROM persresults SET done_tasks = ?, failed_tasks = ?, process_tasks = ?, avarage_mark = ?,
        WHERE employee_id = ?',array($done_tasks[0], $failed_tasks[0], $process_tasks[0], $avg_mark[0], $_SESSION['employee']['id']));

Все запросы, кроме последнего, возвращают массив, поэтому в последнем запросе я называю их массивом, и с этим, похоже, все правильно, но:

ОБНОВЛЕНИЕ ОТ ПОСЛЕДСТВИЙ SET done_tasks = 3, failed_tasks = 0, process_tasks = 0, avarage_mark = '67 .0000 ', WHERE employee_id = 19 An произошла ошибка: SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1064 В вашем синтаксисе SQL есть ошибка; проверьте руководство, которое соответствует вашей версии сервера MySQL для правильного использования синтаксиса рядом с результатами SET done_tasks = 3, failed_tasks = 0, process_tasks = 0, avarag 'в строке 1

Как видите, значения для вставки передаются по мере необходимости, но по какой-то причине возникает эта ошибка.

1 Ответ

1 голос
/ 12 мая 2019

Вы не должны использовать UPDATE FROM (просто UPDATE table_name), и у вас неправильная запятая перед WHERE в вашем обновлении

 R::exec('UPDATE persresults 
    SET done_tasks = ?
    , failed_tasks = ?
    , process_tasks = ?
    , avarage_mark = ?
   WHERE employee_id = ?',array($done_tasks[0], 
         $failed_tasks[0],
         $process_tasks[0],
         $avg_mark[0], $_SESSION['employee']['id']));
...