我有一个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的应用程序。
答案 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的组合可能会为您节省一些挫折感。