【问题标题】:AJAX not working after database migration from MySQL to SQL Server ( Undefined index)数据库从 MySQL 迁移到 SQL Server 后 AJAX 不起作用(未定义索引)
【发布时间】:2020-12-28 13:35:17
【问题描述】:

我现在有一个大问题,过去几天我一直在努力解决:

我正在将一个数据库从 MySQL 迁移到 MS SQL Server 2012,以用于现有的 Web 应用程序。

数据迁移成功,与旧数据匹配。

问题是我必须在使用数据库的 PHP 应用程序中编辑一些 SQL 语句。
从 php-application 到新的 MS SQL Server 的连接已成功建立。但是当我尝试通过 ajax 发送查询时,我总是收到此错误:

遇到 PHP 错误 严重性:通知
消息:未定义索引:filter_18

这是我正在使用的 ajax 代码:

    $.ajax({
        url: global_url+"test/getTest"
        ,type: 'POST'
        ,dataType: 'json'
        ,data: {
             filter_1            : filter_1
            ,filter_2            : filter_2
            ,filter_3            : filter_3
            ,filter_4            : filter_4
            ,filter_5            : filter_5
            ,filter_6            : filter_6
            ,filter_7            : filter_7
            ,filter_8            : filter_8
            ,filter_9            : filter_9
            ,filter_10           : filter_10
            ,filter_11           : filter_11
            ,filter_12           : filter_12
            ,filter_13           : filter_13
            ,filter_14           : filter_14
            ,filter_15           : filter_15
            ,filter_16           : filter_16
            ,filter_17           : filter_17
            ,filter_18           : filter_18
        }
        ,async: true
        ,success: function(data) {
            $("#test").html(data.html);
            $("#amountofx").html("");
            if(data.amountofx_all != amountofx){
            $("#amountofx").html(data.amountofx_all +" von "+data.amountofx);
            }
            else {
                $("#amountofx").html(data.amountofx);
            }
    
            mleh = $(".x:nth-of-type(1)").height();
            $(".btn_show_x").height(mleh);
            $("#pagenr_data").html(data.pagenr);
            if (data.pagenr == "") {
                $("#pagenr_data").hide();
            }
            else {
                $("#pagenr_data").show();
            }
        }
        ,error: function(requestObject, error, errorThrown) {
            alert("Fehler beim Auslesen der Maßnahme.");
            hideOverlay();
        }
        
    });

第一次出现错误的 PHP 是这里的这一行:

// 这里我尝试修改 SQL 语句,以便每个站点只显示 100 个对象

    $starting_from = $_POST['filter_18'] * CONSTANT_WITH_THE_VALUE_100 - (CONSTANT_WITH_THE_VALUE_100 - 1);
    $end_at = $_POST['filter_18'] * CONSTANT_WITH_THE_VALUE_100  - 1;
    //$fetch_next = CONSTANT_WITH_THE_VALUE_100 +1;
    $offset = $starting_from -1;
    
    if ( $_POST['filter_18'] > 1) {
        $sql_offset = " OFFSET " . $offset . "ROWS";
    } else { $sql_offset = " OFFSET 0 ROWS";}
        
        $sql_offset .= " FETCH NEXT " .CONSTANT_WITH_THE_VALUE_100. " ROWS ONLY";

请记住,这段代码不是我编写的,我只需要更改这段代码 sn-p 中的每一个变量才能将其发布到此处。

最让我困惑的是,该应用程序与旧的 MySQL 服务器一起工作,除了一些 SQL 语句外,我没有更改任何语法。错误必须在这个 ajax 或配置文件等中。SQL 语句在没有 ajax 的情况下工作我也检查过它们。控制器/模型和 ajax 之间的连接也可以。

我正在使用 codeigniter 和 jquery 3.5.1。

更新:是不是我必须包含 JSON.parse(data); 之类的东西?到 AJAX 语句?

我非常感谢任何帮助,因为目前我完全迷路了,不知道如何解决这个问题。提前非常感谢。

【问题讨论】:

  • 只需检查服务器正在接收什么。从您的代码看来,filter_18 已定义。
  • 在 PHP 端似乎是一个错误,但你已经共享了 js 代码。请贴出相关的php

标签: php jquery ajax sql-server-2012


【解决方案1】:
A PHP Error was encountered Severity: Notice
Message: Undefined index: filter_18

当缺少 PHP 数组时会出现此通知。例如,您将在 PHP 中设置一个数组,如下所示:

$phpArr = [
    'filter_1' => 'filter',
    'filter_2' => 'other_filter'
    .
    .
    'filter_17' => 'final_filter'
];

这个错误的字面意思是$phpArr 没有在其定义中设置键(也称为“索引”)。如果您在 PHP 配置上使用错误操作设置为 throw E_ALL,那么这将导致异常。但是,对于大多数应用程序,这只会显示为警告,并且当出现此错误时,PHP 实际上不会失败。至于您为什么要达到它,可能与您作为循环传递的数据有关。您的服务器端代码没有第 18 个过滤器,它可能与您最近的迁移关系不大。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-14
    • 2013-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    相关资源
    最近更新 更多