【发布时间】:2018-04-13 08:26:26
【问题描述】:
我在通过 php 脚本添加 SQL 时遇到了一个奇怪的问题。我在 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>
此表单通过 script.js 中的 jQuery 脚本处理:
$(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.php 中的 PLQuery 类中,如下所示:
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()函数时,revision会通过添加2而不是1来更新。例如,revision首先是2,也是最大值,然后在更新之后,revision应该是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();
标签: php jquery sql-server forms addition