2013-07-06 61 views
0

我是相當新的PHP和SQL,我試圖拉出一個對象或嵌套對象的值。當我使用print_r命令時,我能夠看到代碼,但我無法將實際日期與主體分開,並且我也無法使用datetime條件搜索sql。我知道「Date」作爲smalldatetime數據類型存儲在sql中,我不知道如何使用它。從嵌套的stdClass對象獲取值,並搜索sql數據類型smalldatetime

當我嘗試使用搜索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]Incorrect syntax near '&'. [message] => [Microsoft][SQL Server Native Client 11.0][SQL Server]Incorrect syntax near '&'.))

,所以我不能拉帶日期的查詢中有適當的,因爲我不不知道如何。爲了進一步澄清,我能夠使用以下信息從數據庫中獲取信息,但我仍然無法從日期對象中提取日期。

這裏就是我如何加載對象:

$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 Object ([Register_Id] => 3 [Account_Id] => 5 [Register_Number] => 17 [Credit_Or_Debit] => D [Accounting_Period_Id] => 13 [Date] => DateTime Object ([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 Object ([date] => 2010-12-21 12:29:06 [timezone_type] => 3 [timezone] => MST))

我需要能夠做兩件事,我覺得我正在撞牆。這只是我無法接觸的,我希望有人能幫助我。

問題:

  • 如何解決使用日期時間標準的SQL查詢(即把所有REGISTER_ID的有內最後3天的日期)?

  • 怎麼拉的日期和時間了對象,並將其放置到一個PHP變量

+0

用'和'代替&& – Orangepill

回答

0

使用和替代& &

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

謝謝您指出我使用了錯誤的操作符。我試過了,但它仍然無效。我甚至試着用「日期」來代替Register_Id,沒有什麼會拉起來的。 – user2555448

0

好了,所以用的幫助上面的朋友和chetan,我能夠回答第一個問題。我的第一個問題是我在問題中有錯誤的操作員。我的第二個問題,是我在格式化日期錯誤。需要的時間要格式化的以下兩種方法之一:

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

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

第一種方法使用的隱式轉換從varchar到日期。日期IE'mm/dd/yyyy'或'dd/mm/yyyy'的順序由您的本地設置控制。第二種方法更合適,因爲{d}指定將varchar轉換爲日期並且不依賴於您的日期格式設置。

但我仍然需要第二個問題的答案,我如何在日期時間對象上打印日期?

0

回答了第二個問題。由於sql是以DateTime格式輸出數據,我需要創建一個新的DateTime變量並將信息轉儲到該對象中。一旦我做到了,我就能夠格式化我需要的數據並相應地使用它。

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

這會以我需要的格式輸出日期。