2016-04-14 133 views
4

我使用PDO来连接MS-Access数据库在那里我有一栏叫Instalación选择列名和特殊字符(O)

$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] => 

正如你可以看到我跑出去的想法去面对的问题。你能帮我解决吗? 我也觉得奇怪显示错误,当我得到了渲染问题...

+0

你可以试着改变你的PHP源文件的编码为'Windows的1252'(例如,在记事本“在ANSI编码” ++),使PDO_ODBC和Access ODBC驱动程序可以就“Instalación”的字符编码达成一致。 –

回答

2

我得到了同样的错误,我想你的PHP源文件是UTF8编码,您试图打开Access数据库,通常用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()); 
    } 
+0

感谢您的时间,但我无法再对其进行测试,这是我在实习过程中遇到的一个问题,我无法测试您的解决方案:/ 让我们希望别人也会面临同样的问题,很高兴看到你的解决方案:) –

+0

好吧...我已经测试了我的解决方案,但没有问题...当你有一个测试变化随时标记我的答案被接受。谢谢 –

+0

非常感谢@IvanCachicatari!这么简单,但我已经为此奋斗了几天了! – Fingashpitzzz