【问题标题】:Get values from nested stdClass objects, and search sql data type smalldatetime从嵌套的 stdClass 对象中获取值,并搜索 sql 数据类型 smalldatetime
【发布时间】:2013-07-06 03:28:18
【问题描述】:

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

当我尝试使用以下方法搜索 sql 时:

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

我收到以下错误:

Array ( [0] => Array ( [0] => 42000 [SQLSTATE] => 42000 [1] => 102 [code] => 102 [2] => [Microsoft][SQL Server Native Client 11.0 ][SQL Server]'&' 附近的语法不正确。[message] => [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] => 安全服务 [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] => 日期时间对象([日期] => 2010-12- 21 12:29:06 [timezone_type] => 3 [timezone] => MST ) )

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

问题:

  • 如何使用 datetime 条件修复 sql 查询(即提取所有在过去 3 天内日期的 register_id)?

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

【问题讨论】:

  • and替换&&

标签: php sql sql-server


【解决方案1】:

使用 AND 代替 &&

SELECT * FROM GL_Register WHERE Register_Id='5' AND Date='2010-12-8 0:00:00'

【讨论】:

  • 感谢您指出我使用了错误的运算符。我试过这个,它仍然不起作用。我什至尝试只使用“日期”而不是 Register_Id 来查找,但什么都不会出现。
【解决方案2】:

好的,在上面的朋友和 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 对象上打印日期?

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2020-01-08
      • 2018-06-24
      • 1970-01-01
      • 1970-01-01
      • 2017-10-06
      • 2020-11-21
      • 1970-01-01
      • 2014-05-04
      • 1970-01-01
      相关资源
      最近更新 更多