Добавление SQL через скрипт php ведет себя странно

У меня странная проблема с дополнениями в SQL через скрипт php. В PL.php у меня есть следующая форма:

        echo "<form id='editploptionform'>
            <div class='table-row'>
                <input type='hidden' name='id' value='".$row['id']."'>
                <input type='hidden' name='order_id' value='".$row['order_id']."'>
                <div class='table-column-options'><input type='text' name='edit_option_number' value='".$row['option_number']."'></div>
                <div class='table-column-options2'><input type='text' name='edit_option_description' value='".$row['option_description']."'></div>
                 <input type='submit' value='Bewerk' class='edit'>
            </div>
            </form>

Эта форма обрабатывается с помощью сценария jQuery в script.js:

    $(document).on('submit', '#editploptionform', function() {
            $.ajax({
                type: 'POST',
                data: $(this).serialize(),
                url: "editploption.php",
                success:function(data){

                    bootbox.alert("De optie is aangepast!", function(){

                            location.reload();
                    });

                }
            });
            return false;
    });

В файле editploption.php вызывается функция, обновляющая параметр:

$obj = new PLQuery($_POST['order_id']);
$obj->doEditPlOption($_POST['id'], $_POST['order_id'], $_POST['edit_option_number'], $_POST['edit_option_description']);

Функция doEditPlOption () находится в классе PLQuery в PLQuery.php и выглядит следующим образом:

class PLQuery
{
    private $hookup;
    private $tableMaster3 = '[docgen].[dbo].[pl]';

public function doEditPlOption($id, $orderid, $optionnumber, $optiondescription)
    {
        $this->hookup=UniversalConnect::doConnect();

        try 
        {

            $updateresult = $this->hookup->query("
                                              UPDATE [docgen].[dbo].[pl] SET 
                                                order_id = '".$orderid."', 
                                                option_number = '".$optionnumber."', 
                                                option_description = '".$optiondescription."', 
                                                revision = (SELECT MAX( revision ) + 1 FROM pl where order_id  = '".$orderid."')
                                                WHERE id = '".$id."';
                                                ");

            $updateresult->execute();


        }
        catch(PDOException $e)
        {
            echo $e;
        }

        $this->hookup = null;
    }

}

Все работает нормально, кроме добавления в столбец ревизии в запросе. Это касается следующего фрагмента кода, в котором что-то идет не так:

 revision = (SELECT MAX( revision ) + 1 FROM pl where order_id  = '".$orderid."')

Каждый раз, когда выполняется функция doEditPlOption (), ревизия обновляется путем добавления 2 вместо 1. Так, например, ревизия - это сначала 2, что также является максимальным, затем после обновления ревизия должна быть 3, но по какой-то причине ревизия установлен на 4.

Однако когда я выполняю запрос непосредственно в базе данных SQL, используя, например, следующий запрос:

  UPDATE [docgen].[dbo].[pl] SET 
            order_id = '217109', 
            option_number = '423', 
            option_description = 'vcvx', 
            revision = (SELECT MAX( revision ) + 1 FROM pl where order_id = '217109')
            WHERE id = '7'

добавление работает правильно, что означает, что для версии установлено значение max + 1. Я проверил, дважды ли я вызываю функцию doEditPlOption (), но это не так.

Что еще могло вызвать странное поведение, описанное выше?

Я думаю, что он выполняется дважды, потому что вы уже вызвали свой запрос в своей первой строке, которая включает запрос, и он уже был выполнен, потому что это не подготовленный оператор. Затем после этого вы сделали $updateresult->execute();, который снова выполнил запрос. Попробуйте удалить $updateresult->execute();.

Siege21x 13.04.2018 10:34
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
1
28
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, что он выполняется дважды, потому что вы уже вызвали свой запрос в своей первой строке, которая включает запрос, и он уже был выполнен, потому что это не подготовленный оператор. Затем после этого вы выполнили $updateresult->execute();, который снова выполнил запрос. Попробуйте удалить $updateresult->execute(); или сначала подготовьте свой запрос.

Другие вопросы по теме