Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP getdate()在代码中的两个不同位置使用时不返回同一天/月_Php_Sql Server_Date_Datetime_Web - Fatal编程技术网

PHP getdate()在代码中的两个不同位置使用时不返回同一天/月

PHP getdate()在代码中的两个不同位置使用时不返回同一天/月,php,sql-server,date,datetime,web,Php,Sql Server,Date,Datetime,Web,我有一个函数调用另一个函数将一些值写入MSSQL数据库。它将字符串请求作为第一个参数,如果这些值包含在变量中且无法在查询中显式写入,则它将接受一个数组,该数组包含要在查询中输入的值(在查询中有?)。以下是所讨论的功能: public function dbInsert(){ $curr_date = date('Y-m-d H:i:s'); $this->db->query("INSERT INTO DAI_REQ.META_REQUEST ". "

我有一个函数调用另一个函数将一些值写入MSSQL数据库。它将字符串请求作为第一个参数,如果这些值包含在变量中且无法在查询中显式写入,则它将接受一个数组,该数组包含要在查询中输入的值(在查询中有?)。以下是所讨论的功能:

public function dbInsert(){
    $curr_date = date('Y-m-d H:i:s');

    $this->db->query("INSERT INTO DAI_REQ.META_REQUEST ".
        "(DATE_RECU, DATE_TERMINEE, USER_ID, STATUS) ".
        "VALUES(?, '', ?, 'R');", array($curr_date, $this->userId));
    $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(?, ?, '', ?, 'N/A', 'N/A', ?, ?, ?, ?, ?, ?, ?, ?, ?, 'R', 0, 'N/A', ?, ?, ?);",
        array($this->userId, $curr_date, $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'];
}
如您所见,我调用了两次
query
函数,在这两次查询中,我使用了包含今天日期的变量
$curr\u date
。不幸的是,运行此代码后,当我使用sql server查看数据库时,我在
DAI_REQ.META_请求
表中看到的日期与
DAI_REQ.REQUEST
表中看到的日期不同。后者包含一个好的日期,而前者包含一个随机的日期(尽管我每天都在尝试这个日期)。例如,后者将
2014-06-30 14:08:40.427
,前者将
2014-02-19 00:00:00.000

我还必须提到,我们有两个服务器(也就是两个数据库),一个用于开发,一个用于公共部署。我所描述的问题发生在公共部署服务器上,而不是在开发服务器上

我还尝试通过直接调用
query
函数中的
getdate()
函数来删除
$curr\u date
变量的使用,如下所示:

$this->db->query("INSERT INTO DAI_REQ.META_REQUEST ".
    "(DATE_RECU, DATE_TERMINEE, USER_ID, STATUS) ".
    "VALUES(GETDATE(), '', ?, 'R');", array($this->userId));
...
$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));
导致此行为的原因是什么?

getdate()
返回一个关联数组,其中包含时间戳的日期信息,如果没有给出时间戳,则返回当前本地时间。。您需要的是:

getdate()
返回一个关联数组,该数组包含时间戳的日期信息,如果没有给出时间戳,则返回当前本地时间。。您需要的是:

有关详细信息,请参阅

我有这种行为的原因是,在第一次
INSERT
查询中,行实际上没有被插入到
DAI_REQ.META_请求中。这是由于部署服务器的
DAI_REQ.META_请求
表未设置为自动递增
ID
属性。

有关详细信息,请参阅


我有这种行为的原因是,在第一次
INSERT
查询中,行实际上没有被插入到
DAI_REQ.META_请求中。这是由于部署服务器的
DAI_REQ.META_请求
表未设置为自动递增
ID
属性。

是否可以发布架构?这两个表的数据类型可能不同。@BA_Webimax我现在手头上没有架构,但我可以确认
DAI_REQ.REQUEST
DAI_REQ.META_REQUEST
中的两个字段都属于
(日期时间,非空)
您的代码自然会受到竞争条件的影响。您只是假设在执行插入操作和选择操作之间,不可能为同一用户将其他记录插入数据库。这是一个错误的假设。您应该使用@@IDENTITY或类似工具来获取刚才插入的记录的id。@MarcB SCOPE_IDENTITY()更好,但无论哪种情况,它都必须是同一批的一部分(当前代码发送两个不同的批)。@MarcB@AaronBertrand所以不要编写
$mr_select=$this->db->query(“从AI_REQ.META_请求中选择前1个ID,其中USER_ID=?ORDER BY ID DESC;”,数组($this->userId))
从该查询中获取ID,我应该编写
$mr_ID=$this->db->query(“选择当前标识('DAI_REQ.META_请求'))
直接发布?能否发布架构?这两个表的数据类型可能不同。@BA_Webimax我现在手头没有架构,但我可以确认
DAI_REQ.REQUEST
DAI_REQ.META_REQUEST
中的两个字段都是
类型(日期时间,非空)
您的代码自然会受到竞争条件的影响。您只是假设在执行插入操作和选择操作之间,同一用户的其他记录不可能被插入数据库。这是一个错误的假设。您应该使用@IDENTITY或类似工具来获取刚插入的记录的id。@MarcB SCOPE_IDENTITY()更好,但无论哪种情况,它都必须是同一批的一部分(当前代码发送两个不同的批)。@MarcB@AaronBertrand因此,不要编写
$mr_select=$this->db->query(“从AI_REQ.META_请求中选择前1个ID,其中USER_ID=?ORDER BY ID DESC;”,数组($this->userId))
从该查询中获取ID,我应该编写
$mr_ID=$this->db->query(“直接选择当前标识('DAI_REQ.META_REQUEST')”);
?我已经尝试过了,但没有解决问题。我已经用
$curr_date=getdate();
替换为
$curr_date=date('Y-m-d H:I:s'))
和我有相同的行为。我尝试过这个方法,但没有解决问题。我将行
$curr\u date=getdate();
替换为
$curr\u date=date('Y-m-d H:I:s');
和我有相同的行为。
$curr_date = date('Y-m-d H:i:s');