【问题标题】:MSSQL INSERT query failing for a specific table when called with PHP使用 PHP 调用特定表时,MSSQL INSERT 查询失败
【发布时间】:2014-08-24 19:54:51
【问题描述】:

我需要阅读从我们的网站创建请求的日期。创建该请求时,对应于该请求及其元请求的信息将分别插入到DAI_REQ.REQUESTDAI_REQ.META_REQUEST 表中。我们还有一个开发服务器和一个公共部署服务器。由于某种原因,该问题仅发生在我们的部署服务器上..

不幸的是,在DAI_REQ.META_REQUEST 表中插入元请求信息的INSERT 查询不起作用,但我之后执行的SELECT 查询确实有效(所以在我看来,这会删除任何连接数据库/表本身的问题)。我也使用与DAI_REQ.REQUEST 上的INSERT 查询相同的语法,所以我认为这不是查询语法问题。我还尝试在 sql-server 中手动插入行,它工作正常。最后,我echo'ed 了$this->userId 的值,我将其用作INSERT 查询的参数,以查看它是否包含正确的ID,并且确实如此。我对$this->db->query(...) 的返回值做了同样的事情,它不返回任何东西(仅在我们的部署服务器上)。

我也知道我在表格中检索最后插入的行的方式并不完美,但这不是当前的问题,稍后会更改。

这是发生问题的实际代码:

public function dbInsert(){

    // The actual problematic query
    $this->db->query("INSERT INTO DAI_REQ.META_REQUEST ".
        "(DATE_RECU, DATE_TERMINEE, USER_ID, STATUS) ".
        "VALUES(GETDATE(), '', ?, 'R');", array($this->userId));

    // This works fine though
    $mr_select = $this->db->query("SELECT TOP 1 ID FROM DAI_REQ.META_REQUEST WHERE USER_ID = ? ORDER BY ID DESC;",
            array($this->userId));
    $mr_result = $mr_select->result_array();
    $mr_id = $mr_result[0]['ID'];

    $sim = 'N/A';
    if(isset($this->recurrenceType))
        $sim = 'Recurrent';

    $this->db->query("INSERT INTO DAI_REQ.REQUEST ".
        "(USER_ID, ASSIGNED_DATE, REQUEST_END_DATE, MODEL, EXPERIMENT, VARIABLE, START_DATE, END_DATE, ".
        "LON_FROM, LAT_FROM, LON_TO, LAT_TO, RESOLUTION, FORMAT, SIMULATION, STATUS, ".
        "CANCELLED_YN, PROJECT, MR_ID, URL_ORIGIN, DATE_EMAIL) ".
        "VALUES(?, GETDATE(), '', ?, 'N/A', 'N/A', ?, ?, ?, ?, ?, ?, ?, ?, ?, 'R', 0, 'N/A', ?, ?, ?);",
        array($this->userId, $this->model, $this->startDate, $this->endDate, 
                $this->lonFrom, $this->latFrom, $this->lonTo, $this->latTo, 
                $this->resolution, $this->format, $sim, $mr_id, $this->url_origin, $this->date_email));

    $r_select = $this->db->query("SELECT TOP 1 ID FROM DAI_REQ.REQUEST WHERE USER_ID = ? ORDER BY ID DESC;",
            array($this->userId));
    $r_result = $r_select->result_array();
    $this->id = $r_result[0]['ID'];
}

【问题讨论】:

  • “不起作用”是什么意思?尝试在 mysql 控制台或 phpmyadmin 中运行此查询,看看它返回什么。
  • @szymanskilukasz 不起作用意味着该行未添加到表中。我已经在我的帖子中提到过我确实尝试在 sql-server 中手动添加它并且它确实在那里工作。我使用的是 MSSQL,而不是 MySQL。
  • 您的两台服务器指向不同的数据库,对吗?此外,当您尝试手动插入时,这是否意味着您从 MS SQL Server 应用程序运行查询或从表视图中编辑了行?
  • @Choub890 好的。这是我的猜测。部署服务器未设置为在您运行未指定 ID 的查询时自动分配 ID 列。
  • @Choub890 我想是的,我有一段时间没有使用MSSQL了。但是,是的,您的部署数据库有它,因此它不会为您自动增加它。

标签: php sql sql-server database web


【解决方案1】:

部署服务器使用的数据库未设置为自动递增ID 列。在 Microsoft SQL Server 中,对于 ID 列,您可以将 Identity 设置为 Yes 并将 Identity Increment 设置为您希望 ID 列递增的任何数字。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    相关资源
    最近更新 更多