Access ODBC无法读取名称中带有多个双引号的表

时间:2014-07-10 14:29:40

标签: php sql ms-access

我有一个Access 2003数据库,其中包含大量具有奇怪名称的表。我需要使用PHP脚本和ODBC读取表的记录。

有些表的名称在其中有双引号,如下所示:

Weird """""" Table_Name

ODBC连接工作正常,选择使用“普通”文件名工作正常。在使用odbc_exec($dbh, 'SELECT * FROM [Weird """""" Table_Name]')

它给出了:

  

警告:odbc_exec():SQL错误:[Microsoft] [Driver ODBC Microsoft   访问] Parentesi non valide nel nome'Weird ['。,SQL state 37000 in   SQLExecDirect in ...(php文件)。

我知道ODBC驱动程序会翻译' " '中的' [ ',我该如何逃避' " '

从每个dbms工具使用时表都可以,它们属于使用过的基于Access的应用程序。

1 个答案:

答案 0 :(得分:0)

该错误似乎是Access ODBC驱动程序中的特性。尝试通过C#中的ODBC读取该表时,我得到了相同的结果。

无论如何,PHP和Access ODBC在最好的时候都不会相处得很好。如果可能的话,我会建议您使用COM来操作PHP中的Access数据库,如下所示:

<?php
// this code requires the following php.ini directive:
//
// extension=php_com_dotnet.dll

$path = "C:\\Users\\Public\\db1.mdb";
$con = new COM("ADODB.Connection"); 
$con->Open(
        "Provider=Microsoft.Jet.OLEDB.4.0;" .
        "Data Source=$path");

$rst = new COM("ADODB.Recordset");
$sql = 'SELECT * FROM [Weird """""" Table_Name]';
$rst->Open($sql, $con, 3, 3);  // adOpenStatic, adLockOptimistic

while (!$rst->EOF) {
    echo $rst['TextField']->Value . "<br/>";
    $rst->MoveNext;
}

$rst->Close();
$con->Close();

我只是尝试过,确实有效。在我看来,从长远来看,避免使用PHP和Access ODBC的组合可能会为您节省一些挫折感。