首页 > 解决方案 > MDBTools 驱动程序在 MS Acess 备忘录数据类型上无法正常工作

问题描述

我正在尝试在将格式化的 MS Access 数据库上传到服务器后读取它们,以将其中的数据存储到 MySQL 服务器中。该数据库包含 memo 数据类型,通过使用带有 MDBTools 和 PDO 的 unixODBC 是不可读的。

我在 ubuntu18.04.1 服务器上运行 PHP 7.2.17-1,安装了 unixODBC 并且 PDO 库启动并运行,由于它无法读取备忘录数据类型,我从这里接受了一个建议,而不是使用 PDO 类进行操作访问数据库,我使用ODBC 函数来完成这项工作。它在一定程度上显示了修剪后的值,但没有显示正确的文本,它也将数字转换为浮点值。

例子:

以前,我的代码使用不获取备忘录数据类型的 PDO 类看起来像这样。

$query = 'SELECT * FROM Product';
$mdb_file = '/var/www/html/azam/Product.mdb';
$driver = 'MDBTools';
$dataSourceName = "odbc:Driver=$driver;DBQ=$mdb_file;";
$connection = new PDO($dataSourceName);
$result = $connection->query($query)->fetchAll(\PDO::FETCH_ASSOC);
print '<pre>';
print_r($result);   
print '</pre>'

我现在正在使用 ODBC 函数,它检索备忘录数据类型的修剪值并将数字转换为浮点数,在十进制值之前附加多个零。

$query = 'SELECT * FROM Product';
$mdb_file = '/var/www/html/azam/Product.mdb';
$connection = odbc_connect("Product.mdb","",""); 
$result = odbc_exec($connection,$query);
while($row = odbc_fetch_array($result))
{   echo "<pre>";
    print_r($row);
    echo "</pre>";
}

PS:我已按照建议配置了 odbc.ini,并尝试将查询列转换为 varchar(200),这会在建立连接时产生错误,这种情况下可能不支持。

我期望 ODBC 函数返回完整长度的备忘录数据类型字符串,但它显示修剪后的值,以及作为数字而不是浮点值返回的数字数据类型。

标签: phplinuxpdounixodbcmdbtools

解决方案


推荐阅读