我使用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 table
或select [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 :(得分:2)
我得到了同样的错误,我认为您的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());
}