2017-02-16 90 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是否知道)。 –