簡體   English   中英

用PHP調用特定表時,MSSQL INSERT查詢失敗

[英]MSSQL INSERT query failing for a specific table when called with PHP

我需要閱讀從我們的網站創建請求的日期。 創建該請求時,與該請求及其元請求相對應的信息分別插入DAI_REQ.REQUESTDAI_REQ.META_REQUEST表中。 我們也有一個開發服務器和一個公共部署服務器。 由於某種原因,該問題僅發生在我們的部署服務器上。

不幸的是,在DAI_REQ.META_REQUEST表中插入元請求信息的INSERT查詢不起作用,但是我DAI_REQ.META_REQUESTSELECT查詢也可以工作(因此,在我看來,這消除了數據庫/表本身的任何連接問題)。 我還使用與在DAI_REQ.REQUESTINSERT查詢相同的語法,因此我不認為這是查詢語法問題。 我也嘗試在sql-server中手動插入為行,並且工作正常。 最后,我echo$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'];
}

部署服務器使用的數據庫未設置為自動遞增ID列。 在Microsoft SQL Server中,對於ID列,可以將Identity設置為Yes並將Identity Increment為希望ID列遞增的任何數字。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM