0

我对 php 和 sql 还很陌生,我试图从对象或嵌套对象中提取一个值。当我使用 print_r 命令时,我能够看到代码,但我无法将实际日期与对象分开,而且我也无法使用日期时间条件搜索 sql。我确实知道“日期”作为 smalldatetime 数据类型存储在 sql 中,但我不知道如何使用它。

当我尝试使用以下内容搜索 sql 时:

$sql = "SELECT * FROM GL_Register WHERE (Register_Id='5' && Date='2010-12-8 0:00:00')";

我收到以下错误:

数组 ( [0] => 数组 ( [0] => 42000 [SQLSTATE] => 42000 [1] => 102 [代码] => 102 [2] => [Microsoft][SQL Server Native Client 11.0][SQL服务器]'&' 附近的语法不正确。[消息] => [Microsoft][SQL Server Native Client 11.0][SQL Server]'&' 附近的语法不正确。))

所以我不能正确地提取带有日期的查询,因为我不知道如何。为了进一步澄清,我可以使用以下信息从数据库中提取信息,但我仍然无法从 Date 对象中提取日期。

这是我加载对象的方式:

$sql = "SELECT * FROM GL_Register WHERE Register_Id='3'";
$stmt = sqlsrv_query( $conn, $sql);
if( $stmt === false ) {
    die( print_r( sqlsrv_errors(), true));
    }
else{
    echo $sql;
}

while($obj = sqlsrv_fetch_object( $stmt)) {
   $count++;
   $row = '<tr>';
   $row .= '<td>'.$count.'</td>';
   //$row .= '<td>'.$obj->Date->DateTime->date.'</td>';
   $row .= '<td>'.$obj->Account_Id.'</td>';
   $row .= '<td>'.$obj->Customer_Id.'</td>';
   $row .= '<td>'.$obj->Category_Id.'</td>';
   $row .= '<td>'.$obj->Credit_Or_Debit.'</td>';
   $row .= '<td>'.$obj->Memo.'</td>';
   $row .= '<td>$'.$obj->Amount.'</td>';
   $row .= '</tr>';
   echo "$row";
}

当我使用“print_r($obj)”时,它显示的是:

stdClass 对象([Register_Id] => 3 [Account_Id] => 5 [Register_Number] => 17 [Credit_Or_Debit] => D [Accounting_Period_Id] => 13 [Date] => DateTime 对象([date] => 2010-12- 21 00:00:00 [timezone_type] => 3 [timezone] => MST) [Register_Type_Id] => 1 [Reference] => 300002 [Type_CVEO] => C [Customer_Id] => 362 [Vendor_Id] => 1 [ Employee_Id] => 1 [Other_Name] => [Offset_Account_Id] => 1 [Splits] => N [Amount] => 179.9600 [Mult_Sign] => 1 [Memo] => Security Services [Status] => O [Is_Offset] => N [Offset_Register_Id] => 4 [Branch_Id] => 2 [Job_Id] => 1 [Service_Ticket_Id] => 1 [Category_Id] => 6 [Job_Expense_Code] => [Expense_Type_Id] => 5 [Post_WIP_Account_Id] => 1 [Primary_Register_Number] => 0 [Part_Id] => 1 [Currency_Id] =>1 [Exchange_Rate] => 1.0000 [Amount_Nat] => 179.9600 [Date_Time_Stamp] => DateTime 对象([date] => 2010-12-21 12:29:06 [timezone_type] => 3 [timezone] => MST))

我需要能够做两件事,我觉得我的头撞到了墙上。这只是我无法企及的,我希望有人可以帮助我。

问题:

  • 如何使用日期时间标准修复 sql 查询(即提取所有在过去 3 天内具有日期的 register_id)?

  • 如何从对象中提取日期和时间并将其放入 php 变量中

4

3 回答 3

0

使用 AND 而不是 &&

SELECT * FROM GL_Register WHERE Register_Id='5' AND Date='2010-12-8 0:00:00'
于 2013-07-06T03:56:47.830 回答
0

回答了第二个问题。由于 sql 以 DateTime 格式输出数据,因此我需要创建一个新的 DateTime 变量并将信息转储到该对象中。一旦我这样做了,我就能够格式化我需要的数据并相应地使用它。

$newDate = new DateTime('NOW');
while($obj = sqlsrv_fetch_object($stmt)) {
$newDate = $obj->Date->format('Y-m-d');

这会以我需要的格式输出日期。

于 2013-07-15T16:28:37.507 回答
0

好的,所以在上面的朋友和 chetan 的帮助下,我能够回答第一个问题。我的第一个问题是我在问题中使用了错误的运算符。我的第二个问题是我的日期格式错误。日期需要采用以下两种方式之一进行格式化:

select * from GL_Register where Date = '07/01/2013'

或者

select * from GL_Register where Date = {d'2013-07-01'}

第一种方法使用从 varchar 到 date 的隐式转换。日期的顺序 IE 'mm/dd/yyyy' 或 'dd/mm/yyyy' 由您的本地设置控制。第二种方法更合适,因为 {d} 指定将 varchar 转换为日期并且不依赖于您的日期格式设置。

但我仍然需要第二个问题的答案,如何在 datetime 对象上打印日期?

于 2013-07-15T16:16:01.710 回答