2017-02-16 27 views
0

我想從PHP中使用MDBTools的AccessDB文件中獲取一些數據。 所有正常的SQL查詢,除了ORDER BY和GROUP致力於通過錯誤在線:PDO中的ORDER附近的語法錯誤

當我使用ORDER BY我收到錯誤

行錯誤:語法錯誤附近ORDER
語法錯誤近的順序
了沒有結果爲 'SELECT * FROM CHECKINOUT ORDER BY檢查時間DESC' 命令

這是代碼

$dataSourceName = "odbc:Driver=$driver;DBQ=$mdb_file;"; 
$conn = new PDO($dataSourceName); 
$q = $conn->prepare("SELECT * FROM CHECKINOUT ORDER BY CHECKTIME DESC"); 
$q->execute(); 
$result = $q->fetchAll(PDO::FETCH_OBJ); 
print_r($result); 

[更新] 當我在mysqli中使用上述查詢時,它像魅力一樣工作。我創建了類似於訪問db文件的數據庫的數據庫,並使用此代碼,

$conn = new mysqli($dbhost, $dbuser, $dbpass, $dbname); 
$row = $conn->query("SELECT USERID, CHECKTIME, CHECKTYPE FROM CHECKINOUT ORDER BY USERID DESC"); 
$result = $row->fetch_object(); 
print_r($result); 

上面的代碼像魅力一樣工作。 但使用PDO時不行。

+0

是否有一個'檢查時間。 '專欄? –

+0

這就是我想知道的。 – unixmiah

+0

你的查詢看起來不錯 – unixmiah

回答

0

首先沒有ORDER BY的查詢工作?

在我使用連接到.MDB的本地Linux機器上,我根本無法使用ORDER BY。 我不知道這是由於odbc驅動程序,還是我的一端的配置錯誤。林相當確定GROUP BY和ORDER BY只是不支持。不過,我不能指出你的文檔。

$conn = new PDO("odbc:Driver=MDBTools; DBQ=$mdb_file; UID=; PWD=;"); 
    $q = $conn->prepare("SELECT col1, col2, col3 FROM some_table WHERE FINISHED = 0"); 
    $success = $q->execute(); 
    $error_info = $q->errorInfo(); // if needed 

    $result = $q->fetchAll(PDO::FETCH_OBJ); 

    aasort($rows, "col2"); 

我會建議找到行然後再排序。 這不是什麼你問,但它完成同樣的事情(或應該)

編輯:對不起,我忘了,包括aasort,我認爲功能始建於

function aasort (&$array, $key) { 
    $sorter = []; 
    $toreturn = []; 
    reset($array); 

    foreach ($array as $ii => $va) 
     $sorter[$ii] = $va[$key]; 

    arsort($sorter); 

    foreach ($sorter as $ii => $va) 
     $toreturn[$ii] = $array[$ii]; 

    $array = $toreturn; 
} 
+0

感謝您提供上述代碼建議。我會嘗試一下。代碼在不使用ORDER BY的情況下工作。 –

+0

在Microsoft Access中,[ORDER BY](https://msdn.microsoft.com/en-us/library/bb208913%28v=office.12%29.aspx?f=255&MSPPError=-2147217396)和[GROUP BY ](https://msdn.microsoft.com/en-us/library/bb177905(v = office.12).aspxhttps://msdn.microsoft.com/en-us/library/bb177905(v = office.12 ).aspx)存在。當然,ODBC驅動程序本身就是一個世界。但我不知道他是否使用Access或MySQL服務器(我不確定OP是否知道)。 –