【发布时间】:2014-08-24 19:54:51
【问题描述】:
我需要阅读从我们的网站创建请求的日期。创建该请求时,对应于该请求及其元请求的信息将分别插入到DAI_REQ.REQUEST 和DAI_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