jquery — добавление 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'

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

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

1

Решение

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

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector