2016-04-14 190 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