【问题标题】:SQL addition through php script is behaving strangely通过 php 脚本添加 SQL 行为异常
【发布时间】: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-&gt;execute();再次执行查询..尝试删除$updateresult-&gt;execute();

标签: php jquery sql-server forms addition


【解决方案1】:

我认为它被执行了两次,因为您已经在包含查询的第一行调用了查询,并且它已经执行,因为它不是准备好的语句。然后你做了$updateresult-&gt;execute(); 再次执行查询。尝试删除$updateresult-&gt;execute(); 或先准备你的查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-04
    • 2010-10-30
    • 2011-07-20
    • 2017-03-21
    • 1970-01-01
    • 2019-07-21
    • 2011-07-27
    相关资源
    最近更新 更多