繁体   English   中英

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

[英]Access ODBC cannot read tables with multiple double quotes in their names

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

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

Weird """""" Table_Name

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

它给:

警告:odbc_exec():SQL错误:[Microsoft] [Driver ODBC Microsoft Access]括号无效的名称'Weird ['。,...(php文件)中SQLExecDirect中的SQL状态37000。

我知道ODBC驱动程序' " '' [ '翻译' " ' ,我如何才能转义' " '

从每个dbms工具中使用这些表都是可以的,它们属于已使用的基于Access的应用程序。

该错误似乎是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结合使用可能会为您节省很多挫败感。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM