行错误:PDO中ORDER附近的语法错误

时间:2017-02-16 15:26:34

标签: php mysql pdo

我试图在PHP中使用MDBTools从AccessDB文件中获取一些数据。 除ORDER BY和GROUP BY

外,所有正常的SQL查询都正常工作

当我使用ORDER BY时,我收到错误

  

Line出错:ORDER附近的语法错误
  ORDER附近的语法错误   没有结果'SELECT * FROM CHECKINOUT ORDER BY CHECKTIME 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时。

1 个答案:

答案 0 :(得分:0)

首先查询是否在没有ORDER BY的情况下工作?

在本地linux盒子上,我使用连接到.MDB,我根本不能使用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;
}