【问题标题】:select column name with special character (ó)选择带有特殊字符 (ó) 的列名
【发布时间】:2016-08-05 21:00:30
【问题描述】:

我使用 PDO 连接一个 ms-access 数据库,其中我有一个名为 Instalación 的列:

$db = new PDO("odbc:DRIVER={Microsoft Access Driver (*.mdb)}; Dbq=my/path/to/file.mdb");
$str="SELECT * FROM table";
$qr=$db->query($str);
if( $qr != false){
    while($result=$qr->fetch(PDO::FETCH_ASSOC)){
        print_r($result);
    }
}
else{
    print_r($db->errorInfo());
}

我得到了这样的东西:[Instalaci�n] => DHg 我使用 utf8_encode() 解决了它,所以它变成了 ([Instalación] => DHg)

我的问题如下: 当我将字符串查询更改为select Instalación from table 时,$db->query($str) 返回false

我通过更改$str 尝试了一些事情,以下是相关的错误:

错误 #1

我做了什么

select Instalación from tableselect [Instalación] from table

我得到的错误:

[0] => 07002
[1] => -3010
[2] => [Microsoft][Controlador ODBC Microsoft Access] Pocos par�metros. Se esperaba 1. (SQLExecute[-3010] at ext\pdo_odbc\odbc_stmt.c:254)
[3] => 07002

错误 #2

我做了什么:

$quoted=$db->quote('Instalación');
$str="select $quoted from table";

我得到的错误:

[0] => 42000
[1] => 0
[2] => [Microsoft][Controlador ODBC Microsoft Access] La instrucci�n SELECT incluye una palabra reservada, le falta un argumento o est� mal escrito, o bien los signos de puntuaci�n no son correctos. (SQLPrepare[0] at ext\pdo_odbc\odbc_driver.c:206)
[3] => 

错误 #3

我做了什么:

SELECT \'Instalación\' from caudal

我得到的错误:

[0] => 42000
[1] => 0
[2] => [Microsoft][Controlador ODBC Microsoft Access] Error de sintaxis (falta operador) en la expresi�n de consulta '\'Instalación\''. (SQLPrepare[0] at ext\pdo_odbc\odbc_driver.c:206)
[3] => 

如您所见,我没有办法面对这个问题。你能帮我解决这个问题吗? 我还发现显示错误时出现渲染问题很奇怪......

【问题讨论】:

  • 您可以尝试将 PHP 源文件的编码更改为 Windows-1252(例如,Notepad++ 中的“Encode in ANSI”),以便 PDO_ODBC 和 Access ODBC 驱动程序可以就 @ 的字符编码达成一致987654337@.

标签: php ms-access pdo


【解决方案1】:

我遇到了同样的错误,我认为您的 php 源文件是 UTF8 编码的,并且您正在尝试打开通常与 ISO-8859-1 一起使用的访问数据库。

要运行您的查询,您必须转换您的字符串:

    $db = new PDO("odbc:DRIVER={Microsoft Access Driver (*.mdb)}; Dbq=my/path/to/file.mdb");
    //$str="SELECT * FROM table";

    $utf8_sql = 'SELECT [Instalación] FROM Table1'; // file must be UTF-8 encoded
    $iso88591_1 = utf8_decode($utf8_sql);
    $iso88591_2 = iconv('UTF-8', 'ISO-8859-1', $utf8_sql);
    $iso88591_sql = mb_convert_encoding($utf8_sql, 'ISO-8859-1', 'UTF-8');



    $qr=$db->query($iso88591_sql);
    if( $qr != false){
        while($result=$qr->fetch(PDO::FETCH_ASSOC)){
            print_r($result);
        }
    }
    else{
        print_r($db->errorInfo());
    }

【讨论】:

  • 感谢您的宝贵时间,但我无法再对其进行测试,这是我在实习期间遇到的一个问题,我无法测试您的解决方案:/ 希望其他人会面临同样的问题,很高兴看到您的解决方案:)
  • 好吧...我已经测试了我的解决方案,但没有问题...当您有更改要测试时,请随时将我的答案标记为已接受。谢谢
  • 非常感谢@IvanCachicatari!如此简单,但我已经为此苦苦挣扎了几天!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-14
  • 2022-05-25
  • 2019-07-07
  • 2023-03-08
  • 2022-10-19
  • 1970-01-01
  • 2017-06-15
相关资源
最近更新 更多